C++中传入参数的实际参数会不会在函数执行后改变
时间: 2023-10-06 07:08:03 浏览: 97
C#调用C++动态库,执行回调函数并传递结构体参数
在C++中,如果传入的参数是基本类型(int、float、char等),则函数内部对这个参数进行的改变不会影响到调用函数时所传入的实际参数的值。但是,如果传入的参数是指针类型或引用类型,则函数内部对指针或引用所指向的对象进行的改变会影响到调用函数时所传入的实际参数的值。
例如,假设我们有以下代码:
```c++
void func(int a, int &b, int *c) {
a = 10;
b = 20;
*c = 30;
}
int main() {
int x = 1;
int y = 2;
int z = 3;
func(x, y, &z);
cout << x << " " << y << " " << z << endl;
return 0;
}
```
在这个例子中,我们定义了一个函数`func`,该函数有一个基本类型参数`a`、一个引用类型参数`b`和一个指针类型参数`c`。在函数内部,我们改变了这三个参数的值。在`main`函数中,我们定义了三个整型变量`x`、`y`和`z`,并将它们分别初始化为1、2和3。然后,我们调用`func`函数,并将`x`和`y`的值作为实参传递给了`func`函数的形参`a`和`b`,同时将`z`的地址作为实参传递给了`func`函数的形参`c`。最后,我们输出`x`、`y`和`z`的值。
运行上述代码后,输出结果为`1 20 30`。可以看到,在调用`func`函数后,`y`和`z`的值发生了改变,而`x`的值没有发生改变。这是因为在`func`函数中,对于参数`a`的改变只在函数内部生效,不会影响到`main`函数中的变量`x`;而对于参数`b`和`c`的改变,则会影响到`main`函数中的变量`y`和`z`,因为它们都是通过引用或指针传递的。
阅读全文