当前位置:  开发笔记 > 编程语言 > 正文

在C++中,我无法掌握指针和类

如何解决《在C++中,我无法掌握指针和类》经验,为你挑选了3个好方法。

我刚从大学毕业,现在已经在C++工作了一段时间.我理解C++的所有基础知识并使用它们,但我很难掌握指针和类等更高级的主题.我已经阅读了一些书籍和教程,我理解其中的例子,但是当我看到一些高级的现实生活中的例子时,我无法弄明白.这让我很伤心,因为我觉得它让我无法将我的C++编程提升到一个新的水平.有没有人有这个问题?如果是这样,你是如何突破它的?有没有人知道任何真正描述指针和类概念的书籍或教程?或者使用高级指针和类技术的一些示例代码具有良好的描述性注释?任何帮助将不胜感激.



1> 17 of 26..:

理解C/C++中的指针

在能够理解指针如何工作之前,有必要了解如何在程序中存储和访问变量.每个变量都有2个部分 - (1)存储数据的存储器地址和(2)存储数据的值.

存储器地址通常称为变量的左值,存储的数据值称为rvalue(l和r表示左和右).

考虑一下声明:

int x = 10;

在内部,程序将存储器地址与变量x相关联.在这种情况下,假设程序将x指定为驻留在地址1001(不是实际地址,但为简单起见而选择).因此,x的左值(存储器地址)是1001,x的右值(数据值)是10.

只需使用变量"x"即可访问右值.为了访问左值,需要"地址"运算符('&').表达式"&x"被读作"x的地址".

Expression          Value
----------------------------------
x                   10
&x                  1001

存储在x中的值可以随时更改(例如x = 20),但x(&x)的地址永远不会改变.

指针只是一个可用于修改另一个变量的变量.它通过为其右值设置内存地址来实现此目的.也就是说,它指向内存中的另一个位置.

创建指向"x"的指针如下:

int* xptr = &x;

"int*"告诉编译器我们正在创建一个指向整数值的指针."=&x"部分告诉编译器我们将x的地址分配给xptr的rvalue.因此,我们告诉编译器xptr"指向"x.

假设xptr被分配给1002的内存地址,那么程序的内存可能如下所示:

Variable    lvalue    rvalue
--------------------------------------------
x           1001      10   
xptr        1002      1001

下一个难题是"间接运算符"('*'),其使用方法如下:

int y = *xptr;

间接运算符告诉程序将xptr的rval解释为内存地址而不是数据值.也就是说,程序查找存储在由xptr(1001)提供的地址处的数据值(10).

把它们放在一起:

Expression      Value
--------------------------------------------
x                   10
&x                  1001
xptr                1001
&xptr               1002
*xptr               10

既然已经解释了概念,这里有一些代码来演示指针的功能:

int x = 10;
int *xptr = &x;

printf("x = %d\n", x);
printf("&x = %d\n", &x);        
printf("xptr = %d\n", xptr);
printf("*xptr = %d\n", *xptr);

*xptr = 20;

printf("x = %d\n", x);
printf("*xptr = %d\n", *xptr);

对于输出,您会看到(注意:每次内存地址都不同):

x = 10
&x = 3537176
xptr = 3537176
*xptr = 10
x = 20
*xptr = 20

注意如何为'*xptr'赋值,改变了'x'的值.这是因为'*xptr'和'x'指的是内存中的相同位置,如'&x'和'xptr'具有相同的值所示.



2> nsanders..:

指针和类在C++中并不是真正的高级主题.它们非常基础.

对我来说,当我开始用箭头绘制框时,指针会凝固.为int画一个框.而int*现在是一个单独的框,箭头指向int框.

所以:

int foo = 3;           // integer
int* bar = &foo;       // assigns the address of foo to my pointer bar

使用我的指针框(条形图),我可以选择查看框内的地址.(这是foo的内存地址).或者我可以操纵我拥有的任何地址.那种操纵意味着我跟随箭头到整数(foo).

*bar = 5;  // asterix means "dereference" (follow the arrow), foo is now 5
bar = 0;   // I just changed the address that bar points to

类完全是另一个主题.有一些关于面向对象设计的书籍,但我不知道对于初学者来说是好的.您可能会对介绍Java书籍感到满意.



3> luke..:

此链接有一个视频,用于描述指针如何工作,以及claymation.信息丰富,易于消化.

这个页面有一些关于类的基本信息.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有