其他分享
首页 > 其他分享> > C以参考方式致电

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