面試常考題 c 中指標和引用的區別?

2021-10-09 20:14:40 字數 2298 閱讀 6747

指標是乙個變數,只不過這個變數儲存的是乙個位址,指向記憶體的乙個儲存單元;而引用僅是個別名;

引用使用時無需解引用(*),指標需要解引用;

引用只能在定義時被初始化一次,之後不可變;指標可變;

//指標

int a =1;

int c =2;

int*b =

&a;cout<<

*b

cout<<

*b

cout<<

*b

cout<<

*b<結果:1

//a = 1 , *b = 1 , c = 2

0//a = 0 , *b = 0 , c = 2

2//a = 0 , *b = 2 , c = 2

3//a = 0 , *b = 3 , c = 3

//引用

int a =1;

int c =2;

int&b = a;

cout

cout

cout

cout<結果:1

//a = 1 , b = 1 , c = 2

0//a = 0 , b = 0 , c = 2

2//a = 2 , b = 2 , c = 2

2//a = 2 , b = 2 , c = 3

引用沒有 const,指標有 const;

順帶提一下 const

char*,

char

const*,

char

*const 三者的區別

const

char

*p;// 宣告乙個指向字元或字串常量的指標(不可通過指標p去修改p指向的內容)

char

const

*p;// 等同於 chonst char *

char

*const p;

//宣告乙個指向字元或字串的指標常量,即不可以修改p的值,也就是位址無法修改。

//記憶方法:const 修飾p=>p的值不能變=>p的指向無法修改

引用不能為空,指標可以為空;

結合上述第三點,引用只會在定義時初始化一次,所以引用為空不合理

int*t =

null

;//nullptr

「sizeof 引用」得到的是所指向的變數(物件)的大小,而「sizeof 指標」得到的是指標本身的大小;

double a =1;

double

* b =

&a;double

& c = a;

cout<<

sizeof

(b)<<

" "<<

sizeof

(c)<結果:

48 指標大小為4,引用大小為8

指標和引用的自增(++)運算意義不一樣;

int a =1;

int b =2;

int* c =

&a;int

* d =

&b;int

& e = b;

cout<" "<" "<<

*d<<

" "

,e++

; cout<" "<<

*d<<

" "<結果:

0x68fed0

0x68fecc22

//a的位址,b的位址,*d(b)的值,c(b)的值

0x68fed013

//d++,指標++,d的值(即位址值,加上了該資料型別的長度(這裡為sizeof(int)=4)),跳躍到了a,也就是此時d指向了a。所以*d(a)=1。

//e++,引用++,相當於儲存的值++,所以此時b和e都為3

指標可以有多級,但是引用只能是一級(int **p;合法 而 int &&a是不合法的(注:當作右值引用當然是可以,但是如果像指標那樣去理解則是不對的))

int a =1;

int*aa=

&a;int

**aaa =

&aa;

cout<" "<" "

*aa<<

" "<<

**aaa<結果:

10x68fed8

0x68fed4

11

從記憶體分配上看:程式為指標變數分配記憶體區域,而引用不需要分配記憶體區域。

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

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

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

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

C 中指標和引用的區別

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