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个跨度。
-----------每日点下---广告---投食哇偶-----------