📌  相关文章
📜  在 C++ 中作为函数参数传递时的增量运算符行为

📅  最后修改于: 2022-05-13 01:55:22.362000             🧑  作者: Mango

在 C++ 中作为函数参数传递时的增量运算符行为

在 C++ 中,自增运算符用于将变量的值加 1。符号 ++ 用于表示自增运算符。有两种类型的增量运算符:

  • 预增量运算符:这种形式的增量运算符在将变量的值分配给变量之前将其值增加 1。
  • 后增量运算符:这种形式的增量运算符在分配变量后将变量的值增加 1。

示例

C++
// C++ program to show the pre and 
// post increment operators
#include 
using namespace std;
  
void fun(int x, int y, int z)
{
    // values in x, y, z wll
    // be printed.
    cout << x << " " << y << 
          " " << z;
}
  
// Driver code
int main()
{
    // declaring and defining 
    // variable
    // i with value 2.
    int i = 2;
    
    // Calling function fun 
    // with 3 parameters, 
    // demonstrating
    // pre-increment.
    
    // function called
    fun(++i, ++i, ++i);
    return 0;
}


C++
// C++ program to implement the pre
// and post-increment operators
#include 
using namespace std;
  
// Function with three 
// parameters x, y and z
void fun(int x, int y, int z)
{
    // Print the value of the
    // parameters
    cout << x << " " << y << " " << z;
}
  
// Driver code
int main()
{
    // declaring and defining 
    // variable i with value 5.
    int i = 5;
  
    // Function fun is called 
    // with both pre-increment
    // and post-increment
    // operators
    fun(i++, i++, ++i);
    return 0;
}


输出
5 5 5

一定想知道输出可以是 3、4、5 或 5、4、3 或任何组合。但输出是 5 5 5。但它是增量运算符的性质或行为。存储变量 i的值的源位置或内存是恒定的,并且每个增量运算符仅在此处增加值。再举一个例子就清楚了。让我们再看一个程序。

下面是实现前置和后置自增运算符的 C++ 程序。

C++

// C++ program to implement the pre
// and post-increment operators
#include 
using namespace std;
  
// Function with three 
// parameters x, y and z
void fun(int x, int y, int z)
{
    // Print the value of the
    // parameters
    cout << x << " " << y << " " << z;
}
  
// Driver code
int main()
{
    // declaring and defining 
    // variable i with value 5.
    int i = 5;
  
    // Function fun is called 
    // with both pre-increment
    // and post-increment
    // operators
    fun(i++, i++, ++i);
    return 0;
}
输出
7 6 8

这里的输出也不同。奇怪,不是吗? C++ 标准没有说明参数评估的顺序。因此可以根据编译器行为对其进行评估。

根据前面示例中解释的概念,您一定想知道输出应该是 6 7 8。

如果有人想根据后增量的概念,先使用该值,然后再递增。所以第一个参数中的值应该是 5。但答案是否定的。回忆内存和源位置的原理,然后应用后增量和前增量概念。尝试将这两个概念应用于 fun(++i, i++, ++i) 之类的测试用例,并尝试预测各种测试用例的输出,然后它肯定对您有意义,但发生的顺序可能因 C++ 而异标准。