📜  C |高级指针|问题9

📅  最后修改于: 2021-06-29 04:10:15             🧑  作者: Mango

#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基础课程》。