阅读背景:

C语言函数值传递与地址传递理解_十万铁骑的专栏

来源:互联网 
先举个简单例子:
#include <iostream>
using namespace std;
void Add1(int *a)
{
    (*a)++;
}
void Add2(int a)
{
   a++;
}
int main()
{
    int x=1,y=5;
    Add1(&x);
    Add2(y);
    cout<<x<<" "<<y<<endl;
    return 0;
}
输出:
2 5
这两个自加函数中,Add1是指针传递,Add2是数值传递,
在调用Add2(y)时,系统是先建造一个int型变量a,再将y的值传给a(此时y和a是两个不同地址的变量,只是两者值相同),然后a++,却对y没有任何操作,故在函数调用结束后,释放a,而y没任何变化;
在调用Add1(&x)时,系统先建造int型指针a,然后将实参x的地址传给了指针a,故此时a与&x是指向同一地址,即共享统一数据,当对地址a内的数据进行操作,就是对x进行操作。a++时自然也对x++,当函数调用结束,指针a释放掉,x的值此时已经发生了变化。
这就是两者不同,地址传递的参数都是指针类型,于数值传递不一样。
至于选择那种传递,就要看这个程序的具体目的和功能了,先举个简单例子:
#include <iostream>
using namespace st



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: