以下是引用yaobao在2012-11-22 09:11:05的发言:
不同意7楼的观点,*c是形参他没有分配空间,不代表它的实参没有啊。
对于void add(int a,int b,int &c)这样地址做形参的,就不知道了
这只不过是一个功能函数,具体怎样要看调用它的函数想得到怎样的结果
传值:void add(int a,int b,int c)
调用函数add(m,n,k)
没有改变调用函数实参的值,只是在栈区另外开辟了一段内存存放实参的副本,对实参没有影响
传址:void add(int a,int b,int *c)
调用函数add(m,n,&k)
只改变了调用函数实参k的值,传递的是k的地址的副本,被调函数形参c接收的是k的地址副本,这个地址副本保存在另开辟的一段内存中,他们都指向同一个内存地址,通过改变指针c中存放的变量的值间接改变实参k的值,相当于间接寻址
传引用:void add(int a,int b,int &c) 调用函数add(m,n,k)
只改变了调用函数实参k的值,传递的是k的真实地址,没有产生副本,直接用形参c也就相当于用实参k,直接修改,相当于直接寻址
[
本帖最后由 小小战士 于 2012-11-22 12:21 编辑 ]