注册 登录
编程论坛 C语言论坛

自增自减

lm4399321 发布于 2023-01-10 10:04, 1292 次点击
#include <stdio.h>
int main()
{
    int i=8;
    printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);
 }
为什么得出8,8,7,8-7,-8,它的运算过程是什么?
7 回复
#2
forever742023-01-10 10:09
这个问题就像你吃饭的时候,哪个米粒由哪颗牙齿处理的问题一样。
你要较真儿的话,这一口肯定有个结果,但是下一口会有个另外的结果。
所以我们不探讨它,因为没有指导意义,无法用来预测结果。
#3
lm43993212023-01-10 10:28
考试要考,而且只有当你深入了解计算机如何进行编译过程,才能更好地学习c语言。
我是一个初学者,我也相信对于每一个初学者都应该有探究事物原理的好奇心和兴趣。
我已找到解决方法,谢谢您的发帖。
#4
rjsp2023-01-10 13:09
我也相信对于每一个初学者都应该有探究事物原理的好奇心和兴趣。
但这是未定义行为呀,对未定义行为的任何探究都是无意义的。
假如你用gcc编译的话,她会告诉你 warning: operation on 'i' may be undefined,翻译过来就是 对i的操作可能是未定义的

你可以在网上搜搜 良好定义行为、实现定义行为、未指明行为、未定义行为。
所谓未定义行为,就是C/C++标准表明不需要考虑的行为,一切责任都在写出未定义行为的码农身上。
#5
rjsp2023-01-10 13:14
考试要考
你是谭浩强教材的受害者,谭浩强喜欢把一些谬误奉为圭臬
#6
pvm20002023-01-11 07:24
建议在函数调用的参数中不要使用i++,--i之类的运算,各编译器处理的方式是不一样的
#7
pvm20002023-01-11 07:25
以下是引用rjsp在2023-1-10 13:14:00的发言:

你是谭浩强教材的受害者,谭浩强喜欢把一些谬误奉为圭臬


说得好
#8
pvm20002023-01-11 07:32
以下是引用lm4399321在2023-1-10 10:28:33的发言:

考试要考,而且只有当你深入了解计算机如何进行编译过程,才能更好地学习c语言。
我是一个初学者,我也相信对于每一个初学者都应该有探究事物原理的好奇心和兴趣。
我已找到解决方法,谢谢您的发帖。



考试要考?
让你老师先确定用哪个编译器,讨论才有一丁点意义。
例如你第一楼的程序,在各种编译器下,运行结果是不一样的。

考试出这种题,出这种有争议结果的题?
1