📅  最后修改于: 2023-12-03 15:11:42.157000             🧑  作者: Mango
本文介绍一个简单的程序,它在C和C++中会产生不同的结果。
以下是示例代码:
#include <stdio.h>
int main() {
int i = 0;
printf("%d %d %d\n", ++i, i++, i);
return 0;
}
#include <iostream>
int main() {
int i = 0;
std::cout << ++i << " " << i++ << " " << i << std::endl;
return 0;
}
这个程序的核心代码是一行输出语句:
printf("%d %d %d\n", ++i, i++, i);
这行语句包含了三个参数:++i
、i++
和i
。它们的含义分别是:
++i
:先把变量i
自增1,然后返回自增后的值。i++
:先返回变量i
的值,然后再把i
自增1。i
:变量i
的当前值。这个语句的执行顺序在C和C++中是不一样的。在C中,函数参数的计算顺序是未定义的,即编译器可以自由地决定参数的计算顺序。而在C++中,函数参数的计算顺序是从左到右的。因此,这个程序在C和C++中会得到不同的结果。
在C中,输出结果是:
1 1 0
解释:++i
先把i
自增1变成1,然后返回自增后的值1;i++
返回i
的当前值1,但不会立即自增;i
的值为1。
在C++中,输出结果是:
1 0 1
解释:++i
先把i
自增1变成1,然后返回自增后的值1;i++
返回i
的当前值1,但不会立即自增;i
的值为2。
本文介绍了一个简单的程序,它在C和C++中会产生不同的结果。这个例子展示了C和C++在函数参数计算顺序方面的差异。在编写程序时应注意这些细节,以避免因这种差异导致的错误。