c ++中的函数按值调用和按引用调用

时间:2014-09-04 03:34:23

标签: c++

以下代码是在两种方法中调用函数的示例 请告诉我按值调用和按引用调用之间的主要区别或含义 1.按值计算。   2.请参考。 以下代码说明了按值的方法。

我在评论中指出了我的怀疑

#include<iostream>
int main(){
void change(int);//why function prototype is before function definition and what is 
int orig=10;//meaning of argument int, it did not defined any variable of type int
cout<<"The original value is: "<<orig<<"\n";
change(orig);//what is the meaning of this piece of code
cout<<"Value after change() is over:"<<orig<<"\n";
return 0;
};
void change(int orig){
orig=20;
cout<<"Value of orig in function change() is:"<<orig<<"\n";
return;
}

在本书中,我读到函数定义应该在函数原型之前。

4 个答案:

答案 0 :(得分:0)

主要区别是&#34;通过引用传递&#34;传递对象的引用而不是对象的副本。因此,被调用的函数可以访问对象所在的相同内存位置,并在需要时对其进行修改。相反,当传递对象的副本时,对复制的对象进行修改而不是对原始对象进行修改。

您可以在代码中添加以下内容并查看差异:

#include<iostream>
void change(int);
void change_ref(int&);

int main(){

    int orig=10;//meaning of argument int, it did not defined any variable of type int
    cout<<"The original value is: "<<orig<<"\n";
    change_ref(orig);//what is the meaning of this piece of code
    cout<<"Value after change() is over:"<<orig<<"\n";
    return 0;
};

void change_ref(int& orig){
    orig=20;
    cout<<"Value of orig in function change() is:"<<orig<<"\n";
    return;
}

答案 1 :(得分:0)

按值调用会生成参数的副本并将其放在局部变量中供函数使用,因此如果函数更改局部变量的值,则参数本身不会更改。通过引用调用将参数的引用传递给函数而不是副本,因此如果函数更改参数的值,则参数本身会更改。

函数原型void change(int);告诉编译器有一个名为change的函数,它接受一个int类型的参数并返回void(即什么都没有)。它是按值调用的,因为参数没有&。稍后在您的代码中,您有一行change(orig);,它实际上使用orig类型的参数int调用该函数。由于在此函数调用之前声明了函数原型,因此编译器将其识别为函数。

看一下这个程序的输出:

#include<iostream>

using namespace std;

int main(){
  void change(int);
  void change2(int&);
  int x = 10;
  cout<<"The original value of x is: "<< x <<"\n";
  change(x); // call change(), which uses call by value
  cout<<"Value of x after change() is over: "<< x <<"\n";
  change2(x); // call change2(), which uses call by reference
  cout<<"Value of x after change2() is over: "<< x <<"\n";
  return 0;
};

void change(int orig){
    cout<<"Value of orig in function change() at beginning is: "<<orig<<"\n";
    orig=20;
    cout<<"Value of orig in function change() at end is: "<<orig<<"\n";
  return;
}

void change2(int &orig){
    cout<<"Value of orig in function change2() at beginning is: "<<orig<<"\n";
    orig=20;
    cout<<"Value of orig in function change2() at end is: "<<orig<<"\n";
  return;
}

我已将int orig中的main()更改为int x以希望避免名称混淆,并且我已添加change2()使用按引用进行调用。

答案 2 :(得分:0)

传递值意味着如果你在函数内改变值,那么它将在它之外没有任何影响(当函数返回时)。通过引用传递意味着如果在函数中更改了值,它也将在外部更改(当函数返回时)。

答案 3 :(得分:0)

传递引用或传递值之间的区别的一个很好的例子是将数组传递给函数。它可以通过指针或引用传递。一个很好的例子是链接here.