【发布时间】:2021-07-12 20:11:27
【问题描述】:
根据 C,PostIncrement(a++) > Dereference(*) > Assignment(=) 当我在 c sn-p 下面执行这个时,
#include <stdio.h>
int main(){
int arr[]= {1,2,3};
int *p = a;
*p++ = 3;
for(int i=0;i<3;i++){
printf("%d ",arr[i]);
}
}
输出: 3 2 3
但是如果我们在这个语句中应用优先顺序,
*p++ = 3;
语句将按以下顺序进行评估:
- p++ 将被评估
- *p 将被取消引用。
- 然后将使用赋值运算符将 3 赋值给 *p
如果我们应用上述顺序, p 指向数组 arr 的开头,将首先递增并指向数组的第二个元素。然后第二个元素的地址将被取消引用,然后 3 将分配给第二个索引。所以我们的预期输出应该是 1 3 3 但是我得到的输出是 3 2 3。
我知道我的预期输出不正确。如果您在这种情况下解释编译器输出的评估顺序,将会很有帮助。
【问题讨论】:
-
你的意思是
int *p=arr;
标签: c pointers operator-precedence post-increment