因为你放在前面的时候b你没有给值诶
仍然是一个内存中的随机数
所以语句放在最前面的时候c=a/b这里的b不是你输入的值而是一个随机数
如果放在后面的话编译器就会将你输入的数字代替内存中的那个随机数
运算就可以正常进行了
及时采纳~不懂再问
函数参数的求值顺序是自右向左”更是大错特错。楼主,C语言跟大多数语言一样,没有规定表达式的求值顺序,除了以下几个顺序点:
;(分号,标志一条语句
最终要的是赋值运算符的右结合优先
*bufptr++=n 这个语句拆解开来可以成为 *bufptr=n;bufptr=bufptr+1;
这句话拆解完成没有两义性
而你举出来的反例,y[i]=x[i++]; 由于赋值运算符的右结合优先,所以可能会引起两义,即你前面定义的 i 是要求保留原值还是 自加后的值。导致期望和输出不相符......
个人理解 希望能帮到你
*bufptr++=n; //这一句求值是确定的。 先对指针解引用再赋值,最后指针的值自增。
y[i]=x[i++]; //这一句“=“左右都对i变量进行了操作,所以求值顺序是不确定的。
举个例子,
i = 3;
有两种求值方法 1.y[3] = x[3];
2.y[4] = x[3];
*bufptr++=n在语义上也是不明确的,但是*解引用的值是明确的,就是bufptr在++前的值,所以这句话没有在编译器看类没有歧义,但是不建议用这种语义模糊写法,看着很厉害,其实容易被看代码的人误会。