如果我有一个函数接受一个指向整数的指针,并且我从我的 main 传递一个对整数变量的引用,这是按值调用还是按引用调用?示例代码:
#include <iostream>
using namespace std;
void fun(int *a){
//Code block
}
int main(){
int a = 5;
fun(&a);
return 0;
}
在上面的代码中,对函数fun的调用是按值调用还是按引用调用?
最佳答案
您的调用是按值传递,但类型是int*
,而不是参数类型int
。这意味着创建了指针的拷贝并将其传递给函数。您可以更改它指向的值,但不能更改指针的值。
所以如果你的函数是这样的
void fun(int *a)
{
*a = 10;
}
然后你像这样从 main
调用
int main() {
int b = 1;
fun(&b);
// now b = 10;
return 0;
}
您可以通过将指向它的指针传递给您的函数来修改 b
的值。
如果您执行以下操作会产生相同的效果 - 这是通过引用传递
void fun2(int& a)
{
a = 5;
}
int main()
{
int b = 10;
fun2(b);
// now b = 5;
return 0;
}
现在考虑第三个函数,它按值接受整数参数
void fun3(int a)
{
a = 10;
}
int main()
{
int b = 1;
fun3(b);
// b is still 1 now!
return 0;
}
通过值传递,fun3
更改传递给它的参数的拷贝,而不是 main 范围内的变量 b
。
通过(非常量)引用或指针传递允许修改传递给它的参数。按值或 const 引用传递将不允许更改传递给它的参数。
关于C++ 通过引用调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30083174/