永发信息网

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

答案:5  悬赏:60  手机版
解决时间 2021-02-13 21:28
  • 提问者网友:川水往事
  • 2021-02-13 17:19
如题

*(p + 1) + 1; 谁能告诉我 这句话怎么理解
最佳答案
  • 五星知识达人网友:天凉才是好个秋
  • 2021-02-13 18:20
先算括号里面的表达式,P+1的意思是将指针p所指的变量的地址向后加n个字节,这里的n指的是系统为p所指的变量分配的字节数,如果p指向的是数组名a ,那么p+1就是将a[1]的地址赋给p,*(p+1)就是p+1所指向的变量的值,*(p+1)+1就是给p+1所指向的变量的值再加1,attention,括号里的加一是给地址加,括号外的加一是给值加一
全部回答
  • 1楼网友:神也偏爱
  • 2021-02-13 20:37
p是一个指针,p+1就是把指针p移动一个位置。*(p+1)就是取指针移动过后的值,+1就是在取到那个值后+1 再看看别人怎么说的。
  • 2楼网友:独钓一江月
  • 2021-02-13 20:23
从你的追问中我知道了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。不知还有何疑问
  • 3楼网友:酒者煙囻
  • 2021-02-13 19:03
如果是一维数组的话,下面很多人都说了。如果是二维数组a[2][3] *p=a;的话。p一开始指向的是第0行的地址=&a[0]。p+1以后指向第一行=&a[1]。这时候外面加个*并没有指向任何内容,依然是个地址,因为在二维数组中并不存在a[0]这个元素。这时候再加1得到的就是&a[1][1],就是第一行第一列的地址
  • 4楼网友:人间朝暮
  • 2021-02-13 18:50
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
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯