#include
#include
int main(void)
{
int i;
int *ptr = (int *) malloc(5 * sizeof(int));
for (i=0; i<5; i++)
*(ptr + i) = i;
printf("%d ", *ptr++);
printf("%d ", (*ptr)++);
printf("%d ", *ptr);
printf("%d ", *++ptr);
printf("%d ", ++*ptr);
}
(A)编译器错误
(B) 0 1 2 2 3
(C) 0 1 2 3 4
(D) 1 2 3 4 5答案: (B)
说明:处理此类问题要记住的重要事项是
1)前缀++和*运算符具有相同的优先级,并且从右到左具有关联性。
2) Postfix ++的优先级高于上述两个运算符,并且关联性是从左到右。
我们可以应用以上两个规则来猜测所有
* ptr ++被视为*(ptr ++)
* ++ ptr被视为*(++ ptr)
++ * ptr被视为++(* ptr)
这个问题的测验
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。