传值
function(int A);//A形参
int main(){
function(a);//a实参
return 0;
}
系统在内存里生成一个a的复制。
传指针
function(int* p2);//p2形参
int main(){
int* p = a;
function(p);//p实参
return 0;
}
实参p是一个指向a的指针,传指针其实就是传值,只不过别人传int类型的值(一个数),它传指针类型的值(指针类型的值就是一块内存的地址)。系统生成一个p的复制p2,p2跟p一样指向同一片内存块。
可见函数对p2的任何操作都不会影响到p。
指针p保存的是a的地址(&a),通过*p来取得其所指向的值a。
传引用
function(int &A);//A形参
int main(){
function(a);//a实参
return 0;
}
传引用传递的是实参a本身,而不是实参的一个拷贝,形参的修改就是实参的修改。系统直接使用原始变量的内存空间。
传指针的引用
function(int* &p2);//p2形参
int main(){
int* p = a;
function(p);//p实参
return 0;
}
结合前两个易得。