*(p + 1) + 1; 谁能告诉我 这句话怎么理解

如题

*(p + 1) + 1; 谁能告诉我 这句话怎么理解

哎呀,那得先知道p是什么哟!看样子是指针,可是是什么指针呢?若是普通变量指针,那就是指向下一个变量,再将下一个变量值增1;不过一般没有人这么用,因为单个变量间一般是不连续的,这样用会出大麻烦。若是字符串指针,那就是指向下一个字符串,再指向下一个字符串的第二个字符,比如p是二维数组指针,那就是取第二行第二列的那个元素地址;这是常见的用法之一。如果p是一个数组的首元素的指针,那*(p + 1)就是这个数组第二个元素的值,*(p + 1)+1就是给这第二个元素增值1的意思了……看,说指针是地址,这没错,但指针不仅仅是地址,它还要承载很多信息。如果指针就只是地址的话,就没有必要声明什么int指针、char指针、结构体指针、数组指针、函数指针、文件指针等等了,反正它们都是地址,都占4个字节!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-13
p 是指针,(p+1) 是 指针地址 加 1 *sizeof(指针类型)
*(p+1) 是 [ 指针地址 加 1 *sizeof(指针类型)] 这个地址里存放的值。
例如:
int a[]={1,2,3,4,5};
int *p;
p=&a[0];
(p+1) 是 &a[1];
*(p+1) 是 a[1] 的值
*(p+1) + 1 是 a[1]+1
=============
用下面程序体会一下:
#include<stdio.h>
main(){
int a[5]={1,2,3,4,5};
int *p;
int x;
int b[5][2]={1,2,3,4,5,6,7,8,9,10};
p = &a[0];
x = *(p+1) + 1;
printf("xa=%d\n",x);
p= &b[0][0];
x = *(p+1)+1;
printf("xb=%d\n",x);
return 0;
}
结果:
xa=3
xb=3本回答被网友采纳
第2个回答  2013-09-13
先算括号里面的表达式,P+1的意思是将指针p所指的变量的地址向后加n个字节,这里的n指的是系统为p所指的变量分配的字节数,如果p指向的是数组名a ,那么p+1就是将a[1]的地址赋给p,*(p+1)就是p+1所指向的变量的值,*(p+1)+1就是给p+1所指向的变量的值再加1,attention,括号里的加一是给地址加,括号外的加一是给值加一
第3个回答  2013-09-13
如果是一维数组的话,下面很多人都说了。如果是二维数组a[2][3] *p=a;的话。p一开始指向的是第0行的地址=&a[0]。p+1以后指向第一行=&a[1]。这时候外面加个*并没有指向任何内容,依然是个地址,因为在二维数组中并不存在a[0]这个元素。这时候再加1得到的就是&a[1][1],就是第一行第一列的地址追问

太给力了,你的回答完美解决了我的问题!

本回答被提问者采纳
第4个回答  2013-09-13
从你的追问中我知道了p是一个数组指针的。那么 *p=a 的意思是:p指针指向二维数组的首地址,那么此时*p就是p指针所指地址的内容,即为a[0][0]。而二维数组在c语言(你这应该是C吧)中是按照以下方式分配内存的:a[0][0],a[0][1],a[1][0],a[1][1].所以(p+1)的意识是怕指向的地址的下一个地址,那么*(p+1)自然就是a[0][1]了。那么再+1的话,就是a[0][1]的值加1。不知还有何疑问
相似回答