C语言问题。 *p+i与*(p+i)有什么区别啊?

 我来答
bqfyfive
推荐于2017-11-26 · 超过20用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:39.1万
展开全部
其实在定义时你这样理解就很清楚答案了:
char *p;理解成char (*p);*p在一起是一个char。那么,*p+i就是*p的值加上i,而*(p+i)是在先p+i再*操作,*是什么意思呢,在这里是“取值”。所以,*(p+i)是把指针移动i个位置,再返回前地址的值。
福泽佑之IN
2013-12-13 · TA获得超过2474个赞
知道小有建树答主
回答量:727
采纳率:0%
帮助的人:697万
展开全部

写个C程序解释吧。

#include<stdio.h>
int main()
{
    int a[32]={9,8,7,6,5,4,3,2,1}, *p = a;
    printf("%d %d\n", *p + 1, *(p + 3));
    return 0;
}

输出为 10 6;

为什么呢?因为 *p = a 把 a 数组的首地址的值放在 p 处,所以p = a,*p =a[0]= 9 => *p + 1 = 9 + 1 = 10.

            p + 3 就是a数组的首地址往后移动3位,即p = a[0], p + 3 = a[3]的值,就是6了。

追问
谢谢啦〜
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
D342748379
2013-12-13 · 超过10用户采纳过TA的回答
知道答主
回答量:108
采纳率:100%
帮助的人:34.7万
展开全部
地址加i,地址变了。
地址
追答
1的地址2,地址变成2加i
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式