c 引用 指標。

2022-07-23 11:39:18 字數 2043 閱讀 5815

一、什麼是引用(reference) ?已經存在的物件的另外乙個名字。

引用有什麼特別的?

1.引用在定義時,以&開頭。

2.引用不是物件,只能繫結在物件上。所以必須在初始化的時候,指定引用繫結的物件。而且引用繫結是不可以改變的。

int val = 0

;      

int &refval = val;

不允許這樣初始化int &refval; 

3.就像使用變數名一樣,對引用賦值,實際上是給該引用繫結的物件賦值,獲取引用的值,也同樣是獲取與該引用繫結的物件的值。

int &refval2 = refval ;//

refval2繫結到了val上面。

int copyval = refval; //

初始化copeval為val的值。

二、什麼是指標(pointer)? 存放著某個物件所在位址的物件

和引用的區別是,指標是物件,可以被更改。不必須初始化,儘管一般會初始化以規避一些問題的出現。

1.指標在定義時,以*開頭。賦值時需要使用取位址符(&)來得到某個物件的位址。在c++中,相同的符號,在不同的情況使用,意義不同,就像不同的符號。

int val = 0

;    

int *p = &val; //

p存放val的位址, 即 p是指向val的指標。指標型別一般必須和指向的物件型別完全一致。

2.如何通過指標來得到指標指向的物件的值,以及改變該物件的值?如何獲取指標中的位址?

可以用解引用符(*)獲取指標指向的物件的值,給解引用的指標賦值,就是給被指標指向的變數賦值。

直接獲取指標的值,就是獲取指標存放的位址。

儲存常量位址的指標,必須使用指向常量的指標(pointer to const)

const

int num =0

; const

int *p = # //底層const

但是常量指標可以指向非常量的物件。(不變的是指標所存放的位址,而不是指標指向的物件)

double pi = 3.14159;

double *const pd = π//頂層const,不可以修改指標的值

pi = 1.26;//ok。

*pd = 3.14;//ok, 指向非常量物件的指標可以用來修改物件的值

頂層const和底層const的區別究竟在**?

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...