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

#include

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++)_第1张图片

结论:

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

换种说法:

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

你可能感兴趣的:(指针变量的自增的区别 *p++ (*p)++ *(p++))