C/C++函数调用时的参数传递小结

众所周知:

void method( Object arg ){

...

}

void method(Object & arg){

...

}

的区别,前者 在函数调用的时候,将实参进行了一个复制,复制了一个镜像给了method函数,

不管在method中如何改变arg的值,之前的实参一直都没有变化,自始自终都固定不变。

后者 则是将实参本身传递给method函数,在method函数中对arg做的任何改变,都会引起

实参的变化。

 

而在

void method( char * pA){

...

}

中,如我在外面使用

{

    char * p = "hello world";//假设“hello world”不是const的字符串,即假设p指向字符串“hello world”不是const

    method(p);

}

如我在method函数中,有一句p[0] = 'H';那么,执行完method(p)后,p所指向的字符串为“Hello world”,

之前的h变成了大写H.

而,如果我在method函数中,有一句pA=“hello CHINA"; 那么执行完method(p)后,

p所指向的字符串又为多少?答案是:"hello world".

这是因为,同前面所讲的 void method(Object arg)一个道理,这里只是先将p复制一份,

即pA,这里的p和pA的本身地址是不同的,只是他们所指向的是同一个字符串(同一个地址)。

上面的pA = "hello CHINA";只是把“hello CHINA”的地址付给了pA,即让pA指向“hello CHINA”。

而p仍然指向“hello world”。

因此,答案仍是“hello world”。

 

那么如何才能做到在函数里面改变实参所指向的地址,其实道理也很简单,同样使用&(是引用,而非取地址)

void method(char * & pA ){

...

}

也许,大家这样看着很奇怪,试试就知道了。

 

 

写得不好或者有错的地方,请指出来。

我们共同学习。

如果您有什么建议,请留言。谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值