++*P--;
这是考试中的一个问题,如果P
指向数组中的任何元素的指针,请解释该语句的真正作用。
我什至写了一个简单的代码来评估它:
int i;
int* array = calloc(10, sizeof(int));
for (i = 0; i < 10; i++) {
array[i] = i;
printf("%d,", array[i]);
}
int* P = array + 5;
printf("\n %p", P);
printf("\n %d", *P);
++*P--;
printf("\n %p", P);
printf("\n %d \n", *P);
for (i = 0; i < 10; i++) {
printf("%d,", array[i]);
}
但输出让我更加困惑:
0,1,2,3,4,5,6,7,8,9,
0x100105534
5
0x100105530
4
0,1,2,3,4,6,6,7,8,9,
看起来它首先取消引用P
,然后增加它的值,然后减少指针的值P
,但为什么呢?
根据 p53 中的 K&R 表 2-1(见下图)++、- 和 *(取消引用)从右到左具有相同的优先级和关联性。所以第一步应该是减少 的值,P
然后取消引用,然后增加取消引用的值,我错了吗?