c++函數內改變外部變量的值

chat(int&a); chat(int *a); 這兩個函數是完全不同意義的東西,你的理解主要是在int&a和int* a這個類型上面。要注意int&和int*是兩個完全不同的類型。int&是引用類型,而int*是指向int類型變量的指針類型。 void chat(int&a) { a=20; } 調用此函數: int x=100; chat(x); // 此時x的值變爲20了 如果函數如下: void chat (int*a) { *a=20; } 調用: int x=10; chat(&x); //此時x的值也會變爲20; 這是他們有聯繫的地方,也就是他們都可以在函數裏面改變外面變量的值,但是這兩個的參數傳遞方式是不一樣的void chat(int&a)這個函數是引用傳遞,而void chat(int*a);這個函數是值傳遞(雖然其傳遞的值是地址值,但是還是值傳遞)。 這個引用類型應該怎麼理解呢? 我是這樣理解的:int a=100;那麼a到底是個什麼東西,我們說a使我們定義的一個變量,那麼變量又是個什麼東西呢,不知道你有沒有想過,我們不談編譯原理,但是你可以將a看成是這麼一個東西,a代表了一塊內存空間,注意:是一塊內存空間,也就是說這一塊內存空間可能由一個或多個字節組成,那麼在VC++ 6.0中,int類型的變量佔4個字節,所以a代表了4個字節的連續的內存空間。那麼int &b=a;定義了這一句之後,b和a一樣都代表了那4個字節的內存空間了。再看看int *c=&a;此時c是什麼呢?c也代表了一塊內存空間,在VC ++6.0中int*類型的變量佔4個字節的內存空間,所以c代表了一個連續的4個字節的內存空間,在其內部放的值就是a代表的那塊內存空間的第一個字節的地址值。 所以我們向chat(int&a)傳遞參數的時候例如chat(x)此時a與x同樣代表一塊內存空間,而chat(int*a)調用的時候:chat(&x);此時a裏面的值就是&x,也就是x代表的內存的首地址。 所以你要明白,他們不是傳遞的都是地址!!!!! 在C++中地址和引用不是一個東西!!!


以上是網上看到的一個答案,感覺聽明白,記錄下,

一般來說如果傳遞的是普通的變量,函數內部是無法改變外部的變量的值的,只有傳遞指針或者引用纔有效果。


發佈了27 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章