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

为什么p[i]=*(p+i)请回答的详细一点,最好是用举例子证明的... 为什么p[i] = *(p+i)
请回答的详细一点,最好是用举例子证明的
展开
 我来答
zyplsok
推荐于2016-09-26 · TA获得超过155个赞
知道答主
回答量:91
采纳率:0%
帮助的人:101万
展开全部
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
追问
# include 
int 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
百度网友3af62fe
2012-08-14
知道答主
回答量:10
采纳率:0%
帮助的人:4.1万
展开全部
数值名P代表的是数值的首址,而指针的值不是简单的加法,如在整形中,p+2实际上是首址+2*(sizeof(int)),也就是,指针相加的2实际上2个跨度。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lc598291606
2012-08-14 · TA获得超过107个赞
知道答主
回答量:230
采纳率:0%
帮助的人:126万
展开全部
int p[10];
p你可以认为是一个const指针变量,p的值是其低维度变量的地址,事实上编译器就是按此规则翻译
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式