返回列表 发帖
指针确实难于理解。指针具有两个身份:

第一,指针本身是一个变量。只要是是变量,它就占用内存地址。当然如果没有分配内存地址,不在其内。

第二,指针包含一定的一个内容。指针所特殊的就是,他的内容保存的是其他变量的地址。

以上两点可以通过书中的示例7-7有比较好的体现。

例如,定义指针变量intp1。  intp1=&a  就表示 intp1保存的信息为a的地址。
而*intp1表示是intp1所保存地址的内存单元所保存的值,实际就是a的值。

所以,你给出的  *intp1=&a;   是一种不太合适写法。我们可以这样假设,再给一个变量b。令*intp1=b=&a,则
b=&a,说明b保存的a的地址,这样b就是一个指针。那*intp1=b,则说明 intp1所保存的地址指向的内存单元为b。所以,intp1可以看成a的指针的指针。

上面这个例子比较绕,慢慢想想,就理解了。

TOP

补充一点:

intp=&a   和*intp=a  是等效的。都是给指针intp赋值。

TOP

*intp是一个已经定义的指针,但是intp是没有定义的变量呀,难道在定义*intp指针时就定义了该类型的intp变量?如果我们都没定义intp,那怎么给它赋值呢intp=&a,那不违法?
指针可以这样赋值:*intp=a    ?
不是要 ...
Tomy 发表于 2009-10-30 16:40


呵呵。这是你理解错误。*并不是变量名的一部分,它只是用来表示该变量是一个指针。更准确的说,它是一个运算符。它的作用和&刚好相反。

所以,int *intp1就是对intp1进行定义。这里加*,只是为了表明它是一个指针。理解这一点,你后面的就不是问题了。

TOP

bool * Pbool1,Pbool2 ;        //定义了一个指针和一个整型变量  
这里是我搞错的,应该是
bool * Pbool1,Pbool2 ;        //定义了一个指针和一个bool变量
Tomy 发表于 2009-10-30 16:54


看到了。应该是印刷错误。我确认一下。确认后,再给你消息。谢谢你发现这个问题。

TOP

解决问题,就好。也感谢你发的资源。

TOP

自己整理的?

TOP

主要看到你的笔记中有一处不太好。
就是关于例1的第三行代码
int  *pint1,*pint2=&b;

中间的*pint2=&b不太好。这个很容易让你以后迷惑的。最好改为:
*pint2=b

TOP

返回列表