下一个代码的输出是:
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时又如何呢?这样往回走!
答案 0 :(得分:0)
您调用的是未定义的行为。
在C语言中,函数参数的评估之间没有顺序点。
您必须写:
printf("%d\n%d\n%d\n%d",*ptr, *(ptr), *(ptr+1), *(ptr+2) );
ptr += 3;