一、什麼是引用(reference) ?已經存在的物件的另外乙個名字。
引用有什麼特別的?
1.引用在定義時,以&開頭。
2.引用不是物件,只能繫結在物件上。所以必須在初始化的時候,指定引用繫結的物件。而且引用繫結是不可以改變的。
int val = 0不允許這樣初始化int &refval;;
int &refval = val;
3.就像使用變數名一樣,對引用賦值,實際上是給該引用繫結的物件賦值,獲取引用的值,也同樣是獲取與該引用繫結的物件的值。
int &refval2 = refval ;//二、什麼是指標(pointer)? 存放著某個物件所在位址的物件。refval2繫結到了val上面。
int copyval = refval; //
初始化copeval為val的值。
和引用的區別是,指標是物件,可以被更改。不必須初始化,儘管一般會初始化以規避一些問題的出現。
1.指標在定義時,以*開頭。賦值時需要使用取位址符(&)來得到某個物件的位址。在c++中,相同的符號,在不同的情況使用,意義不同,就像不同的符號。
int val = 02.如何通過指標來得到指標指向的物件的值,以及改變該物件的值?如何獲取指標中的位址?;
int *p = &val; //
p存放val的位址, 即 p是指向val的指標。指標型別一般必須和指向的物件型別完全一致。
可以用解引用符(*)獲取指標指向的物件的值,給解引用的指標賦值,就是給被指標指向的變數賦值。
直接獲取指標的值,就是獲取指標存放的位址。
儲存常量位址的指標,必須使用指向常量的指標(pointer to const)
const但是常量指標可以指向非常量的物件。(不變的是指標所存放的位址,而不是指標指向的物件)int num =0
; const
int *p = # //底層const
double pi = 3.14159;頂層const和底層const的區別究竟在**?double *const pd = π//頂層const,不可以修改指標的值
pi = 1.26;//ok。
*pd = 3.14;//ok, 指向非常量物件的指標可以用來修改物件的值
int num = 3;
const
int *p_i = # //
底層const,不代表它指向的值一定是const.
num = 2;//
ok,*p_i ==2 now
//*p_i = 1;
//wrong ,不可通過底層const指標修改指向的物件的值。
int num2= 3
; p_i = &num2;//
底層const指標可以重新賦值其他位址。
int *const p_t = &num2;
//p_t = #
//wrong,read-only 不可以修改頂層指標的位址。
*p_t = 1;//
ok,可以通過頂層指標修改物件的值。
const
int *const p_m = &num2;
//*p_m = 1;
//wrong ,底層+頂層const指標。
int *p_w;
p_w = p_t;//
ok,頂層指標可以被賦值給普通int指標。
//p_w = p_i;
//wrong ,底層指標不可以被賦值給沒有底層const資格的指標
c 引用 指標
1.引用的作用 給變數起乙個別名,是c 對c的擴充。原名和別名有相同的位址,根本上就是同乙個東西,只是名字不一樣。c 的引用機制主要是為了用作函式引數,增強函式傳遞資料的能力,比如swap函式,引用就是為了直接修改實參。2.宣告方式 int a int b a 緊跟在資料型別後,即為引用宣告符,其他...
C 引用 指標
1.引用的概念及用法 引用 引用不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名。例如 int b a b是a的引用,即b是a的別名。引用的特點 a.乙個變數可取多個別名 b.引用必須初始化 int b 不知道b是誰的別名 c.引用只能在初始化的時候引用一次,不能改變為再引用其他的變數 ...
C 中的指標 引用 指標引用
在c 指標的用處很大,可以快讀的訪問位址空間,而且本身不佔太大記憶體。指標操作在引數傳遞的時候非常方便。既可以作為傳入引數,又可以作為返回值。但是可不可作為函式的傳出引數呢?下面通過乙個例子來說明。教室裡面包含多個老師,每個老師管理多個學生 學生類 pragma once include class...