指针变量的自增的区别 *p++ (*p)++ *(p++)

#include<stdio.h>

int main(){
    int a=2,*p=&a,*q=&a;
    printf("第一行%d %d %d\n",*p++,(*p)++,*q++);//证明*q++是先取*q的值打印,然后指针存储的地址自增,并不会改变a的值 
    printf("第二行%d\n",a);
    p=&a;q=&a;
    printf("第三行%d %d %d %d\n",a,*p,(*q)++,a);//证明printf函数运行顺序从右往左 
    printf("第四行%d %d %d %d\n",a,++(*p),++(*q),a);
    printf("第五行%d ",a);
    printf("%d ",*(p++));//证明*(p++)和*p++是一样的,都是先取*p的值打印,然后指针存储的地址自增 
    printf("%d",a);
    return 0;
} 

输出结果:


结论:

*p++是先取*p的值打印,然后指针p中存储的地址自增。
(*p)++是先取*p的值打印,然后让这个值自增。
*(p++)和*p++是一样的运行顺序。
++*p和++(*p)是一样的,都是先取*p的值,让这个值自增,再打印。

换种说法:

*p++是先取出*p的值打印,然后让p++
(*p)++是先取出*p的值打印,让这个值++
*(P++)是先取出*p的值打印,让p++
++*p和++(*p)都是先取出*p的值,让这个值++,再打印。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天下午,我突然对妈妈说了一句关于狗的话,妈妈说:“你说狗我才想起来,上午我看了一篇文章,讲的是一个大学生...
    在水一方_7228阅读 354评论 0 0
  • 1,德 君子比德于玉,故而佩玉之人会因此而自由分寸,严以律己,宽以待人。特别是在物欲纵横的今天,玉代表的美德尤为难...
    d98da4f62bef阅读 1,338评论 0 0
  • 语录作者:台湾 杜芯莹 因果 当你成功了,你的故事就是传奇 当你失败了,你的故事就是笑话 当你放弃了,你的故事只是...
    风起龙飞阅读 685评论 4 10