下一个代码的输出是:
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/