为什么p[i] = *(p+i)

admin 2月前 218

p[i]的意思就是从地址p开始向后偏移i个单位后的地址空间内的值

*(p+i) 也是上面的意思  

[]实际上就是个地址偏移操作符 ,c语言编译器就是把p[i]转换成*(p+i)处理的,p[i]和*(p+i)无条件等价 

比如有数组int p[4]={1,2,3,4};  
p就是这个数组的首地址  
p[2]就是从p开始偏移2个int单位后的地址内的值 就是3
*(p+2) 这个更好理解,p+2就是在p的基础上+2个int单位的地址,那么*(p+2)就是这个地址内的值:3
追问:
# includeint main(void) { int a[5] = {1,2,3,4,5}; int i; for (i=0; i<5; ++i)  printf("%d\n", a[i]);    //a[i] == *(a+i) return 0; } 这个例子能不能请高手帮我解析一下?
追答:
循环中i为0,1,2,3,4,那么输出就是a[0]换行,a[1]换行,a[2]换行,a[3]换行,a[4] 换行 就是 1 2 3 4

5


2012-08-16 回答
定义二维数组:int a[i][j];
定义一个指针:int *p;
p=a;

p+i:是第i行的首地址.
*(p+i)是第i行第0列元素的地址.
*(p+i)+j是第i行第j列元素的地址.
*(*(p+i)+j)是第i行第j列元素所对应的值.
匿名用户1级
2012-08-16 回答
数值名P代表的是数值的首址,而指针的值不是简单的加法,如在整形中,p+2实际上是首址+2*(sizeof(int)),也就是,指针相加的2实际上2个跨度。



-----------忽略---广告---赞助-----------
最新回复 (0)
返回
发新帖
忽略--广告--赞助
忽略--广告--赞助
忽略--广告--赞助