C++中可以用指针作为函数的参数来达到在函数内部修改外部对象。通常,向函数传递参数时,在函数内部生成该参数的一个拷贝,这称按值传递。在下面的程序中能看到按值传递的效果:
#includeiostream
usingnamespacestd;
voidfun(inti)
{
coutfun()函数中未重新赋值前i=iendl;
i=31;
coutfun()函数中重新赋值后i=iendl;
coutfun()函数中变量i的地址=iendl;
}
intmain()
{
intx=15;
coutmain()函数中未调用fun()前x=xendl;
fun(x);
coutmain()函数中调用fun()后x=xendl;
coutmain()函数中变量x的地址=xendl;
system(pause);
return0;
}
运行这个程序的结果如下:
最初在未调用fun()函数前x的值是15,在调用fun()函数时,在函数调用期间为变量i分配临时空间,拷贝x的值给i初始化它,通过打印的结果很明显看到,也可以看到在fun()函数中改变了i的值,但这并没有让外部对象x的值发生任何的改变,因为他们所处的空间是不同的,这个可以从程序运行结果可以看到。
如果我们想子啊函数内部实现修改外部对象那应该怎么办呢?这时指针就派上用场了,把变量的地址作为参数传递给函数,在函数内部操作该地址空间的数据就可以达到在函数内部修改外部对象的操作。例如把上例程序修改成如下:
#includeiostream
usingnamespacestd;
voidfun(int*i)
{
coutfun()函数中未重新赋值前*i=*iendl;
*i=31;
coutfun()函数中重新赋值后*i=*iendl;
coutfun()函数中变量i的地址=iendl;
}
intmain()
{
intx=15;
coutmain()函数中未调用fun()前x=xendl;
fun(x);
coutmain()函数中调用fun()后x=xendl;
coutmain()函数中变量x的地址=xendl;
system(pause);
return0;
}
运行程序的结果:
可以看到我们在fun()中的操作修改了外部对象x的值,这个就是指针一个很大的用处