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

时间:2021-07-04 01:04:27

众所周知:

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){

...

}

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

 

 

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

我们共同学习。

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