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

回到顶部