C 中指標和引用 陣列之間的區別

2022-09-05 03:24:07 字數 1060 閱讀 7502

指標指向一塊記憶體,它的內容是所指記憶體的位址;而引用則是某塊記憶體的別名,引用初始化後不能改變指向。使用時,引用更加安全,指標更加靈活。

初始化。引用必須初始化,且初始化之後不能呢改變;指標可以不必初始化,且指標可以改變所指的物件

空值。指標可以指向空值,不存在指向空值的引用。當引用或者指標作為引數傳遞的時候,拿到乙個引用的時候,是不需要判斷引用是否為空的,而拿到乙個指標的時候,我們則需要判斷它是否為空。這點經常在判斷函式引數是否有效的時候使用。

引用和指標指向乙個物件時,引用的建立和銷毀不會呼叫類的拷貝建構函式和析構函式。delete乙個指標會呼叫該物件的析構函式,注意防止二次析構。

引用和指標與const。存在常量指標和常量引用指標,表示指向的物件是常量,不能通過指標或者常量修改常量;存在指標常量,不存在引用常量,因為引用本身不能修改指向的特性和與指標常量的特性相同,不需要引用常量。

函式引數傳遞時使用指標或者引用的效果是相同的,都是簡潔操作主調函式中的相關變數,當時引用會更加的安全,因為指標一些修改指向,將不能影響主調函式中的相關變數。所以引數傳遞時盡可能使用引用。

sizeof引用的時候是物件的大小,sizeof指標是指標本身的大小

引用和指標的實現是相同的,「引用只是乙個別名,不會佔記憶體空間」的說法是錯誤的,實際上引用也會再用記憶體空間。

指標和陣列之間的區別

陣列要麼在靜態儲存區被建立(全域性陣列),要麼在棧上被建立。指標可以指向任意型別的記憶體塊。

sizeof可以計算陣列的容量,sizeof(p)得到的是乙個指標變數的位元組數,而不是p所指向的記憶體容量。c++/c語言沒有辦法知道指標所指的記憶體容量,除非在申請記憶體時記住它。

注意當陣列作為函式的引數進行傳遞時,該陣列自動退化為同型別的指標。

注意下面的錯誤

char a =「hello」;

a[0] =『x』;

cout

<< a

注意p指向常量字串

p[0] = 『x』; //

編譯器不能發現該錯誤

cout << p << endl;

C 中 (指標引用)和 (指標)的區別

很久之前學的c 了,複習一下,指標是乙個存放位址的變數,而指標引用指的是這個變數的引用,眾所周知c 中如果引數不是引用的話會呼叫引數物件的拷貝建構函式,所以如果有需求想改變指標所指的物件 換句話說,就是要改變指標裡面存的位址 就要使用指標引用,在網上看到大佬的 簡單明瞭,如下 include usi...

C 中指標引用和指標的區別

指標 是位址 即記憶體單元的編號 指標變數 是乙個存放位址的變數 指標引用 指的是這個指標變數的引用 眾所周知c 中如果引數不是引用的話會呼叫引數物件的 拷貝建構函式 重新開闢一塊一模一樣的記憶體空間 所以如想改變指標變數裡面存的位址,就要使用指標引用 讀 前請先搞懂 二級指標 指標的指標 指向指標...

C 中指標和引用的區別

引用和指標 相同點 1.都是位址的概念 指標指向一塊記憶體,它的內容是所指記憶體的位址 引用是某塊記憶體的別名。區別 1.指標是乙個實體,而引用僅是個別名 2.引用使用時無需解引用 指標需要解引用 3.引用只能在定義時被初始化一次,之後不可變 指標可變 引用 從一而終 4.引用沒有 const,指標...