引用
別名 一定要初始化 (int &c; //error)
引用 不能引用 不可以取位址的資料(如常量)
引用不能改變
引用只能使用 引用變數 所引用的資料
底層使用指標支援,在所有變數使用的地方系統會自動解引用
int a = 10;
int& b = a;
&b =c// 錯誤,引用不能改變
int &a = 10; //錯誤,引用型別的初始值必須是乙個物件,能取位址
double a = 3.14;
int & b = a; //錯誤,此處的引用型別的初始值必須是int型的物件,引用符號與型別像匹配
指標:由於指標*p 也是物件,其本身也有位址&p 和儲存的值 p ,p儲存的資料型別實際為儲存的物件的資料位址,故要訪問儲存的物件需要對變數名進行 「解引用」 *p。
引用:物件的別名,b 為 a 的別名。
不同點:
指標是乙個變數,只不過這個變數儲存的是乙個位址,指向記憶體的乙個儲存單元,可以定義指向指標的指標。而引用僅是個別名,沒有實際位址,所以不能定義指向引用的指標,也不能定義指向引用的引用。
引用使用時無需解引用(*),指標需要解引用;
引用只能在定義時被初始化一次,之後不可變;指標可變;
引用不能為空,指標可以為空;
「sizeof 引用」得到的是所指向的變數(物件)的大小,而「sizeof 指標」得到的是指標本身的大小;
指標和引用的自增(++)運算意義不一樣;(引用的++(自增運算)是其指向的物件本身的運算,而指標的++是記憶體位址的++)
指標可以有多級,但是引用只能是一級(int **p;合法 而 int &&a是不合法的)
指標通過某個指標變數指向乙個物件後,對它所指向的變數間接操作。引用本身就是目標變數的別名,對引用的操作就是對目標變數的操作。
int i = 45;
int* p; //p是乙個int型的指標(可以把int*當成是乙個型別)
int* &r = p; //r是乙個對指標p的引用(r是乙個引用,它的型別為int*)
r = &i; //r引用了乙個指標,因此給r賦值&i就是令p指向i
*r = 0; //解引用r得到i,也就是p指向的物件,將i的值改為0
指標和引用的相同點和不同點
相同點 都是位址的概念 指標指向一塊記憶體,它的內容是所指記憶體的位址 而引用則是某塊記憶體的別名。不同點 指標是乙個實體,而引用僅是個別名 引用只能在定義時被初始化一次,之後不可變 指標可變 引用 從一而終 指標可以 見異思遷 引用沒有const,指標有const,const的指標不可變 引用不能...
指標和引用的相同點和不同點
一 指標 下面這個超連結是之前寫的關於指標的詳解 指標詳解 二 引用 引用就是某一變數 目標 的乙個別名,對引用的操作與對變數直接操作完全一樣。簡單點說就是宣告乙個識別符號為引用,就表示該識別符號是另乙個物件的外號。三 引用和指標的相同點 1 指標和引用都可以優化傳參效率 2 都是位址的概念 指標指...
程序和執行緒的區別 相同點
4 執行緒沒有位址空間,執行緒包含在程序的位址空間中。執行緒上下文只包含乙個堆疊 乙個暫存器 乙個優先權,執行緒文字包含在他的程序 的文字片段中,程序擁有的所有資源都屬於執行緒。所有的執行緒共享程序的記憶體和資源。同一程序中的多個執行緒共享 段 和常量 資料段 全域性變數和靜態變數 擴充套件段 堆儲...