众所周知:
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){
...
}
也许,大家这样看着很奇怪,试试就知道了。
写得不好或者有错的地方,请指出来。
我们共同学习。
如果您有什么建议,请留言。谢谢。