C 11 note 1引用指標和const

2021-07-07 01:52:06 字數 2622 閱讀 6715



conference pointer and const

cppp p45-60

引用,也就是為了給變數取別名,因此,他引用的是變數名、表示式而不是常量;同時,引用必須要初始化,一旦引用完成,引用將和它的初始值物件一直繫結在一起,不能將引用重新繫結在另乙個物件上;不能定義引用的引用。但是可以有一例外:

const &p = 10 ; 是合法的

需要特別理解注意:引用不是物件。所以沒有引用的引用,因為,引用無法再引用乙個已經引用了的變數(它此時不是物件了)。

指標,也就是將用一變數直接指向一記憶體中的位址,它必須要賦初始值(在

c++中所有的定義的變數都是要賦初始值的

),空時,可以指向

ullptr

;指標及其指向的記憶體位址中的變數可以改變值;無返回型別時,可以定義為

void*

。指標其實也是一種型別,所以可以叫為「指標變數」,它是一物件,所以有指向指標的指標,它的意義是記憶體的多重指向。

還有,如果定義了指標

int*p = q ;

那麼在後面,

*p其實就是代表指向

q的記憶體位址的值,也就是等價於

q(在取值上),

*是解引用符號;

p其實就是指標(變數)。還有如果

int *j = nullptr; ,

那麼,w = j ;

語句就是將

w指標與

j指標等起來,所以

w 就是

p 了(在指標指向的記憶體位址上,也就是

q的值上)。

補充:關於指標的值的問題

指向乙個物件

*p = q;

指向緊鄰物件所佔空間的下乙個位置

在鍊錶中

空指標,意味著指標沒有指向任何物件

*p = nullptr;

無效指標,也就是以上之外:-

(沒遇到過?

也就是說指標的錯誤用法吧,也許

引用就是將乙個值、變數、表示式「固化」到乙個變數、引用、指標上。注意,它必須要初始化。與引用和指標不同的是,一旦「固化」了,那麼,不可以將它再改值。同理,

const

的引用固化引用,不可改,但是有一特例:

const int &p = 10;//ok

,因為p

是乙個「常量引用」

int&p = 10 ;//error,

因為引用型別的初始值必須要是乙個物件

同時,注意在

const

中對引用、指標的兩兩之間的同一操作關係,就好比如

double

變數從語法上來講必須與同是

double

型別的變數來進行賦值、代數運算等等。

頂層const

,也就是不可改的固定死的

const,

而底層const

,是可以改變的

,一般的底層的底層

const

是跟指標一起使用的。在多重的

const

限定符、引用和指標中,看除基本變數型別外的最左邊的修飾符,其他的是對這個(基本型別

+第一修飾符的)變數的多層修飾,也就是說,從右向左讀變數的修飾符即可。例如:

inti = 0;

int*const pi = &i ;//

頂層const

,不能改變

p1的值

constint ci = 42;//

頂層const

,不能改變

ci的值

cosntint *p2 = &c1 ;//

底層const ,

可以改變

p2的值

constint *const p3 = p2 ;

//靠左的

const

是底層const ,

靠右的const

的是頂層

const

cosntint &r = ci;//

用於宣告引用的

const

都是底層

const

常量表示式,也就是,「常量」的「表示式」,即是

const +

基本資料型別,必須初始化!!!!。只要變數是乙個常來那個表示式,那麼就應該宣告為

constexpr

型別,但是應該是簡單的字面值型別(算數型別、引用和指標),而類、

io庫、

string

庫等都不是。在

constexpr

與指標中,初始值只能夠是

nullptr

或者是0

,同時,在

constexpr

中,限定的只是對指標有效,而對指標所指的物件無關,例如:

constint *p =nullptr ;//p

是乙個指向整型常量的指標

constexprint *q = nullptr;//q

是乙個指向整數的常量指標

也就是說,

p是乙個「指向常量的指標」,而

q是乙個「常量指標」,

constexpr

把它所定義的物件置為頂層

const

。附:以上相關的見下**:

#include

intmain()

C (二)引用和指標

引用不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名。定義的格式是 型別 引用變數名 已定義過得變數名 引用的特點 1 乙個變數可以取多個別名 2 引用必須初始化 3 引用只能在初始化的時候引用一次,不能改變為再引用其他的變數。include using namespace std vo...

C 複習(1) 引用和指標的區別

引用在定義時必須初始化,而指標沒有要求。引用在初始化時引用乙個實體後,就不能再引用其他實體,而指標可以在任何時候指向任何乙個同型別實 體。沒有null引用,但有null指標。在sizeof中含義不同 引用結果為引用型別的大小,但指標始終是位址空間所佔位元組個數 32位平台下佔4 個位元組 引用自加即...

C和C 面試秘笈三 引用和指標(1)

引用是c 引入的新語言特性,正確 靈活地使用引用,可以使程式簡潔高效。一 一般變數的引用 引用只是給變數起了乙個別名,它們兩個儲存在同乙個儲存單元,具有同一位址。來看下面的 int a 10 int b 20 int rn a int equal rn b cout a a endl cout b ...