This question already has answers here:
Undefined behavior and sequence points
                                
                                    (5个答案)
                                
                        
                                2年前关闭。
            
                    
下一个代码的输出是:

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时又如何呢?这样往回走!

最佳答案

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

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

你必须写:

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

关于c - Printf序列点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53678109/

10-09 02:36