程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++函數中的指針參數與地址參數區別介紹

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

編輯:C++入門知識
比如 一個函數 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++中地址和引用不是一個東西!!!
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved