C语言自增自减运算符的返回值的问题。
题目描述
就是这道普通的c语言题
题目来源
来自c语言课本《C语言程序设计(第二版)》(中国电力出版社)217页,本来想自己实践一下,然后给答案的。
代码
于是我在vs2017上写了如下代码:
#include <stdio.h>
int main(){
int a = 5, b = 20;int * p = &a, * q = &b;
printf("%d,%d,%d,%d",(*p)++, --(*q), *p + (*p)--, ++(*q) - *p);
return 0;
}
结果
实际结果是应该是5,19,12,15。
但是这个代码给的结果是4,20,10,15。
期待大佬能给出一个合理的解释。
到底是不是我的编译器的问题。
回答:
表达式的副作用了解一下
回答:
这属于未定义行为了。
如果参数求值顺序为从右向左,那么你的编译器给的答案就是正确的。我的编译器也是从右向左的求值顺序。
回答:
在书上每一道题都是独立的,彼此不受影响;
但是按照你的代码写法,四道题之间就会彼此产生影响,而且还跟printf求值顺序有关
回答:
我的Macbook环境下的结果:
5 19 12 15
以上是 C语言自增自减运算符的返回值的问题。 的全部内容, 来源链接: utcz.com/p/195417.html