*P++,因为*和++的优先级一样,结合方式都是自右向左,先执行P++使P指向下一个地址,然后再执行*操作,即取P已经增加了1后,指向的地址的数值。
例如:
int a,*p,arr[5]={5,10};
p=arr;
a=*p++;
此时a的值是10;
程序先把arr数组的首地址给了p;p=arr;
然后执行p++操作,此时p指向了arr[1];
再执行取值操纵。此时p=10;
注意以上内容是我从网上找来的,经过才keill里面运行发现不对,所以尽量少用这种炫技的方法。
在keill中以上内容
int a,*p,arr[5]={5,10};
p=arr;
a=*p++;
此时a的值是5,而不是10;所以是先*P解引用,后p又自增。
这时的程序不如写成
int a,*p,arr[5]={5,10};
p=arr;
a=*p;
P++;
此时的a的值是5
这样都明白还不会出错。如果想得到第二个数据可以先自增,再解引用;
int a,*p,arr[5]={5,10};
p=arr;
P++;
a=*p;
此时a的值是10;
*(P++)和*P++不一样的功能。
(*P)++,指的是先取p指向的地址的变量的数值,然后把数值自增1。此句不能单独使用。一般是定义一个变量,把取的值增一后存入变量中。例如
int a,*p,arr[5];
arr[0]=5;
arr[1]=10;
p=arr;(或者:p=arr[0])
a=(*p)++;
此时a的值是6;即,先取arr[0]的值,然后又增1,把此值给a;p此时仍然指向arr[0];
*(p++)指的是,先把P自增1,然后取新的p指向的内存的数值。
int a,*p,arr[5];
arr[0]=5;
arr[1]=10;
a=*(p++);此时a的值是a[1]的值,10。