先举个简单例子: #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的值此时已经发生了变化。 这就是两者不同,地址传递的参数都是指针类型,于数值传递不一样。 至于选择那种传递,就要看这个程序的具体目的和功能了,一般要对参数进行修改的要用地址传递,而只是调用参数的数据进行其他计算并不需要修改数据本身宜用数值传递。
出处:百度知道 http://zhidao.baidu.com/link?url=GDm0ZqIxe-J0KqnYzOsT3QZshtC7St71JuSQ9qBa4J2vKTVdqu5r3ZUgJuNOGu1AWygwutOBV49s0zjGS1z5iq