win8资源管理器重启:急救C++中的指针问题!

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 01:43:53
急救C++中的指针问题!

问题1:
long a=9;
long *p1 = &a
long *p1 = 0
a最后的值应该为0吧

但是如果直接向下面这样去写,而不去先指向一个变量地址,*p的值最后应该是多少?是0吗?
long *p1 = 0

问题2:
char *p1 = 0; p1++; p1 = p1 + 5 * 8 - 1; short *p2 = 0; p2 += 11; p2--;
上面p1的值为40,p2的值也为40,因为p1的原类型是char而p2的是short。
问题1:
p2的最后的值不应该是10吗?但是上面确说是40?是上面说的正确还是我说的正确?
问题2:
上面说的把0赋值给*p,0应该被是一个地址还是把0赋值给*p所指向的地址

你错误的理解了指针,我不知道是你被别人误导还是什么原因。
·问题1:
long a=9;
long *p1 = &a
long *p1 = 0
先不管这种写法是否在编译时出错,a的值为0是没有道理的,你的
理解a=0是这样输写:
问题1:
long a=9;
long *p1 = &a
*p1 = 0
这时a才会为0。我想你出现这种错误的原因在于以为long *p1=0,是将
0赋给指针p1指向的变量a.不要忘了你的写法是在申明变量,在声明变量
时可以赋初值,所以可以有 int *p=&a的写法,你被long *p=0的形式误导了,long *p=0,我们只能认为将p指向0地址。
对于问题2,所以也就有你出现的什么p1的值为40,p1是指针,他的值是地址,char *p1 = 0; p1++; p1 = p1 + 5 * 8 - 1;这里是p1里的值开始是被赋于0地址,然后再作一些指针加减得到是p1=p1+40,由于p1定义为char型,所以40个char单位,指向40这个地址,所以为40可以成立。
对于P2,按我们上述的理解,P2应该为p2=p2+10,也就是增加10个short型的单位,一般short型占4单位,所以为40。(这里认为0地址是合法的情况下讨论)。
希望能让你看懂我所讲的。