Printf序列点

时间:2018-12-07 23:39:59

标签: c

下一个代码的输出是:

40
30
20
10

 unsigned char numbers[] = {10,20,30,40};
 unsigned char* ptr = numbers;
 printf("%d\n%d\n%d\n%d",*ptr, *(ptr++), *(ptr++), *(ptr++) );

我认为++运算符是最先完成的,所以我理解为什么打印的第一个值是40,但是在打印后的30、20和10时又如何呢?这样往回走!

1 个答案:

答案 0 :(得分:0)

您调用的是未定义的行为。

在C语言中,函数参数的评估之间没有顺序点。

您必须写:

printf("%d\n%d\n%d\n%d",*ptr, *(ptr), *(ptr+1), *(ptr+2) );
ptr += 3;