关于C语言中预增和后增运算符的两个问题

问题描述

我不理解运行两个涉及预增和后增运算符的C代码时得到的输出

第一段代码

#include <conio.h>
void main ()
{
 int a = 10;
 a = a++;
 printf ("Value of A: %d",a);
}

现在假设代码实际上是:

int b = a++;

然后,发生的情况是将a的初始值分配给b,然后将a递增。因此,如果我们打印这些值,则应为a = 11和b = 10。

但是,在我上面共享的代码段中,该语句是:a = a++;,因为它是相同的变量,所以当我打印a时我应该得到11,因为a递增了对?但这没有发生,我得到的输出为a = 10。为什么会这样?

我的第二个问题是关于预递增运算符(但也适用于预递减运算符)和以下代码片段:

#include <conio.h>
void main()
{
 int a = 10;
 int b = ++a + a++;
 printf ("The value of B is: %d \nand \nThe final value of A is: %d",b,a);
}

现在,如果我用Java编写并运行上述代码,我将得到a = 12和b = 22的输出,而当我们在纸上进行计算时,答案是正确的吗?首先将a递增到11,然后将其添加到a(也是11),并将此最终值(22)分配给b,然后将a再次递增到12。但是在CI中,输出为23。为什么? / p>

我的CS老师告诉我,这是因为我使用的是64位编译器(准确地说是mingw GCC 64位),并且如果使用32位编译器,我的答案将是22。原因,有人可以更深入地解释这种行为吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)