C语言中的*p++
对比*p、*p++、*(p++)、*++p
*和++属于同一优先级,且方向都是从右向左的,*p++和 *(p++)作用相同。
int a[5] = {1,2,3,4,5};
int *p;
p = a;
printf("*p = %d\n", *p);
printf("p = %p\n", p);
printf("\nOK\n\n");
printf("*p++ = %d\n", *p++);
printf("p = %p\n", p);
printf("*++p = %d\n", *++p);
printf("p = %p\n", p);
printf("*(p++) = %d\n", *(p++));
printf("p = %p\n", p);
*p = 1
p = 0x7fffe161f170
OK
*p++ = 1
p = 0x7fffe161f174
*++p = 3
p = 0x7fffe161f178
*(p++) = 3
p = 0x7fffe161f17c
*p++是执行完 *p后再进行++, *++p是先进行p++再执行 p。 所以 程序中p++后, *p的值不变(仍然是 *p=1),而地址增加4(int型为4字节)。而 *++p结果是地址+1后再取值 *p,所以是3。(地址+1,地址不是连续的,int型为4字节,地址增加一个单元相当于增加一个int,也就是4字节)
|