C以参考方式致电
作者:互联网
如果我有一个函数,它接受一个整数的指针,并且我从我的main传递一个整数变量的引用,这是按值调用还是通过引用调用?示例代码:
#include <iostream>
using namespace std;
void fun(int *a){
//Code block
}
int main(){
int a = 5;
fun(&a);
return 0;
}
在上面的代码中,函数调用是按值调用还是按引用调用?
解决方法:
您的调用是值传递,但类型为int *而不是参数类型int.这意味着指针的副本被生成并传递给函数.您可以更改它指向的值而不是指针的值.
所以如果你的功能是这样的话
void fun(int *a)
{
*a = 10;
}
你这样从主要打电话
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;
}
使用pass by value,fun3会更改传递给它的参数的副本,而不是main范围内的变量b.
传递(非常量)引用或指针允许修改传递给它的参数.通过值或const引用传递将不允许更改传递给它的参数.
标签:c,function,pass-by-reference,pass-by-value,pass-by-pointer 来源: https://codeday.me/bug/20190824/1710379.html