指標位址 值
而引用是一塊記憶體的別名:
int &b=a; b是a記憶體塊的乙個別名
2. 引用使用的時候,不需要解引用*,而指標需要,見上例。
3. sizeof操作不同,sizeof(引用)得到的是實際變數的大小,sizeof(指標)得到的是指標的大小,也就是儲存變數或者物件的位址的大小;
4. 指標執行時可以改變其所指向的值,也就是起所指向的物件可以任意;但是對於引用而言,從一而忠,和乙個物件繫結後就不能更改;
5. 引用的一些規則;
(1)引用被建立的同時必須被初始化(指標則可以在任何時候被初始化)。6. 引用就是某一變數(目標)的乙個別名,對引用的操作與對變數直接操作完全一樣;引用的宣告方法:型別識別符號 &引用名=目標變數名;(2)不能有null 引用,引用必須與合法的儲存單元關聯(指標則可以是null)。
(3)一旦引用被初始化,就不能改變引用的關係(指標則可以隨時改變所指的物件) ;
引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數名的別名。
7. 宣告乙個引用,不是新定義了乙個變數,它只表示該引用名是目標變數名的乙個別名,它本身不是一種資料型別,因此引用本身不佔儲存單元,系統也不給引用分配儲存單元。故:對引用求位址,就是對目標變數求位址。
8. 不能建立陣列的引用。因為陣列是乙個由若干個元素所組成的集合,所以無法建立乙個陣列的別名。
9.
常引用宣告方式:const 型別識別符號 &引用名=目標變數名;
用這種方式宣告的引用,不能通過引用對目標變數的值進行修改,從而使引用的目標成為const,達到了引用的安全性。引用不能修改目標變數的值,但是目標變數能修改自身的值;
int a=1;
int &b=a;
b=2; // error
a=2 ;// right
10. 在這裡補充記憶體的非配格局:
記憶體被分成 程式**區、堆區、棧區 還有個全域性資料區1.程式**區:存放你的全部**
2.堆區:存放用new 申請的變數(如 int a = new int(5))
3.棧區;存放int = 5之類的變數(必須放在函式中)
4.全域性資料區:存放全域性或靜態變數,即定義在函式外的,或加上static的變數
(如:static int a = 5;)
指標以及記憶體分配
指標很靈活,這使得指標很難管理,在定義指標時,將在棧中開闢一塊記憶體存放指標的位址 棧內的記憶體由系統分配和釋放 指標的位址記憶體只是存放指標的位址,不存放指標指向的資料,值得注意的是,定義指標時指標會隨機指向一塊記憶體,如int p p會指向一塊不為空的記憶體,相當危險,例如執行判斷if p 這裡...
指標以及記憶體的分配
1.指標很靈活,這使得指標很難管理,在定義指標時,將在棧中開闢一塊記憶體存放指標的位址 棧內的記憶體由系統分配和釋放 指標的位址記憶體只是存放指標的位址,不存放指標指向的資料,值得注意的是,定義指標時指標會隨機指向一塊記憶體,如int p p會指向一塊不為空的記憶體,相當危險,例如執行判斷if p ...
C 引用,以及引用與指標的區別
在c 中不只是有取位址的意思,還有引用的意思。引用變數是乙個別名,也就是說,它是某個已存在變數的另乙個名字。一旦把引用初始化為某個變數,就可以使用該引用名稱或變數名稱來指向變數,其實可以把它想像成指標,但又區別於指標。引用示例 int r i double s d 引用很容易與指標混淆,它們之間有三...