关于指针自加问题227

发布时间:2024-05-10 11:33 发布:上海旅游网

问题描述:

例如指针*p
*p++ 和p++和(*p)++
各有什么区别 谢谢

问题解答:

1楼错了,*(是指针不是乘号)和++优先及一样,从右到左算,*p++ 实际是和*(p++)等效.

*p++ 理解为取元素*p,然后p的地址+1.
p++ 理解为p的地址+1.
(*p)++ 理解为为取元素*p,然后该元素+1.

打个譬如,
int a[3]={1,3,5},*p;
p=a;

那么*p就是1,p就是a[0]的地址,
*p++ 就是值a[0],即1,然后p指向a[1]
p++ 就是p指向a[1]
(*p)++ 就是值a[0],1,然后+1,使a[0]变成2,p仍然指向a[0]

这是由运算符的优先级决定的。

*的优先级最高。所以*p++ 和(*p)++ 是一个意思,就是对p所指向的内容加一。
而p++是指指针移动到下一个数据位置。具体移动的位置大小,由数据类型决定,如int移动4个字节,char移动1个字节。

*p :取值,读p指向的内存地址的值
*p++ :取值后,更新p的地址,将p的地址加1
p++ :将p的地址加1
(*p)++: 将p指向的内存地址的值加1

热点新闻