c++函數中的指標參數與地址參數區別介紹

來源:互聯網
上載者:User

比如 一個函數 chat(link &a); chat(ling *a); 前者引入一個地址做形參 是不是可以把一個指標變數p。。 這麼用chat(p); 那跟第二個函數 有什麼區別呢 都是傳地址啊。。 小弟弄不明白~~

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++中地址和引用不是一個東西!!!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.