#include<stdio.h>
int main(){
int a=2,*p=&a,*q=&a;
printf("第一行%d %d %d\n",*p++,(*p)++,*q++);//證明*q++是先取*q的值打印橱赠,然后指針存儲(chǔ)的地址自增,并不會(huì)改變a的值
printf("第二行%d\n",a);
p=&a;q=&a;
printf("第三行%d %d %d %d\n",a,*p,(*q)++,a);//證明printf函數(shù)運(yùn)行順序從右往左
printf("第四行%d %d %d %d\n",a,++(*p),++(*q),a);
printf("第五行%d ",a);
printf("%d ",*(p++));//證明*(p++)和*p++是一樣的最住,都是先取*p的值打印箭昵,然后指針存儲(chǔ)的地址自增
printf("%d",a);
return 0;
}
輸出結(jié)果:
結(jié)論:
*p++是先取*p的值打印侨糟,然后指針p中存儲(chǔ)的地址自增碍扔。
(*p)++是先取*p的值打印,然后讓這個(gè)值自增秕重。
*(p++)和*p++是一樣的運(yùn)行順序蕴忆。
++*p和++(*p)是一樣的,都是先取*p的值悲幅,讓這個(gè)值自增套鹅,再打印。
換種說法:
*p++是先取出*p的值打印汰具,然后讓p++
(*p)++是先取出*p的值打印卓鹿,讓這個(gè)值++
*(P++)是先取出*p的值打印,讓p++
++*p和++(*p)都是先取出*p的值留荔,讓這個(gè)值++吟孙,再打印澜倦。