刚刚敲了几行代码,才真正看出传值的蹊跷,下面是代码
#include
#include
void add(int p){
p=p+10;
printf("%d",p);
}
int main(){
void add(int p);
int n=10;
add(n);
printf("%d",n);
return 0;
}
结果输出:20 10
#include
#include
void add(int *p){
*p=*p+10;
printf("%d",p);
}
int main(){
void add(int *p);
int n=10,*q;
q=&n;
add(q);
printf("%d",n);
return 0;
}
结果输出:2293108 20
#include
#include
void add(int &a)
{
a=a+10;
printf("%d",p);
}
int main()
{
int n=10;
add(n);
printf("%d",n);
return 0;
}
结果输出:20 20
不难看出三者之间的异同,*是c语言中的指针操作,函数引用改变的是指向的内存空间,最好理解;
&是c++中的引用概念,本意是为变量设置一个别名,在传参的时候也可以修改实参的值(看到某个网站上面说这也是C++为了简化c指针而做出的改变),同时也修改了形参的值;
最后一个是最简单的, 改变的只是形参的值而并没有改变实参的值。