眾所周知:
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 ){
也許,大家這樣看著很奇怪,試試就知道了。
寫得不好或者有錯的地方,請指出來。
我們共同學習。
ARM函式呼叫時引數傳遞規則
之前在學習如何在c語言中嵌入彙編時有了解到c語言之前的引數呼叫是使用暫存器 r0傳遞第乙個引數,r1傳遞到第二個.一直到r3傳遞第四個引數.但是 實際上有時可能傳遞的引數非常多,超過8個,或是引數中有浮點數之類,引數也會超過4個暫存器,對於超出的部份並不使用r4,而是使用堆疊的方式.對於arm體系來...
函式呼叫時的三種引數傳遞方式
size medium 今天學習 從新手到高手c 全部精華教程 知道了函式呼叫的三種引數傳遞方式 第一種 傳值 size include using namespace std void swap int a,int b int main size medium 程式結果 img 與按值傳遞相比,按...
C C 函式引數傳遞機制
c c 的基本引數傳遞機制有兩種 值傳遞和引用傳遞,我們分別來看一下這兩種的區別。1 值傳遞過程中,需在堆疊中開闢記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形參的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值。2 引用傳遞過程中,被...