我无法找到以下代码的问题。我收到警告信息"操作' ptr'可能是未定义的"在printf声明。结果也以相反的顺序打印(7表示打印元素1和2表示元素2)
int main()
{
int a[4] = {2,7,9,0};
int *ptr=a;
printf("Element1 = %d Element 2 = %d", *ptr, *ptr++);
ptr++;
return 0;
}
答案 0 :(得分:4)
C标准没有定义参数的评估顺序。尝试使用*(ptr + 1)代替* ptr ++,也可以用ptr [1]代替。
答案 1 :(得分:2)
函数参数没有sequenceing or specified evaluation order所以你不知道哪个参数将首先被评估,*ptr
或*ptr++
(甚至是字符串文字) ,这会导致未定义的行为。