简单的显示数组问题的疑惑

img

img

为什么这里两次显示的结果不同,是因为有什么”顺序未被定义“类似的问题吗,这里理解的很模糊需要高人指点

第一个用的number++,连续用了两次number这个变量,编译器在编译的处理无法保证number值是什么。不同的编译器运行结果可能不一样。
根据第一个运行结果分析,编译器是以下面逻辑进行编译的:
int * tmp = number;
number = number +1;
printf("%d,%d",*number, *tmp);

前一个3,2,逗号运算符从右到左所以3,2是右边计算的结果,2是++前的值,后面的2、3就很好理解。

printf函数里的参数是从右往左计算的,并且++作为后置运算符时,是先赋值再自增,所以第一种情况: *number++ 把数组第0个元素的值给了右边的%d,然后指针number自增,这个时候它就指向数组第1个元素的值,所以左边的 *number 这个时候就是3

第二种情况,*number+1只是数组第0个元素的值+1,指针位置并没有移动,所以结果是2,3

有帮助望采纳,谢谢!