C Record10 指標的引用及常量引用

2021-10-02 07:09:59 字數 2752 閱讀 7091

目錄

指標的引用

常量引用

使用變數初始化const引用

使用字面量常量初始化const引用

綜合案例

常量引用總結

總體**

關於指標的引用,類似於c語言中的二級指標的使用,但是,引用幫程式設計師把取位址的過程給自動完成的,所以,實現同樣的功能,乙個是用二級指標,乙個是用指標的引用,後者更簡便,也更高效。

先設定乙個結構體:

//

struct teacher

;

再設定兩個函式,乙個是使用的二級指標,乙個是使用的指標的引用:

//在被呼叫函式 獲取資源 

int getteacher(teacher **p)

tmp = (teacher *)malloc(sizeof(teacher));

if (tmp == null)

tmp->age = 33;

// p是實參的位址 *實參的位址 去間接的修改實參的值

*p = tmp;

}

指標的引用: 

//指標的引用 做函式引數

int getteacher2(teacher* &myp)

myp->age = 36;

}

經過對比,可以發現,通過二級指標的方式來控制記憶體時,過程繁瑣,需要建立輔助指標進行實現,而設定指標的引用,直接就可以完成想要實現的功能。

引用分為普通引用和常量引用,之前的都是普通引用,接下來介紹一下常量引用。比如,這就算是普通引用:

int  a = 10;

int &b = a;

接下來看常引用:

//常引用

int x = 20;

const int &y = x; //常引用 是 讓變數 引用唯讀屬性 不能通過y去修改x了

//y = 21;

常引用的作用是:讓變數擁有唯讀屬性,(在指標作函式引數的時候這個屬性作用比較大,即不能通過y去修改x了)。

常量引用的初始化,分為兩種情況,第一種,是用變數初始化來進行常量引用,會單獨分配記憶體空間(即上面舉得那個例子就是):

int x1 = 30;

const int &y1 = x1; //用x1變數去初始化 常引用

第二種,用常量(即字面量)去初始化:

const int a = 40;  //c++編譯器把a放在符號表中

int &m = 41; //普通引用 引用乙個字面量 請問字面量有沒有記憶體位址

//引用 就是給記憶體取多個門牌號 (多個別名)

//printf("&40:%d \n", &40);

普通引用,引用乙個字面量 是沒有記憶體位址的,即「41」沒有記憶體位址(是直接放在符號表中的),而引用就是給記憶體取別名,那「41」沒有記憶體,引用還去啥別名呢?啥也取不了。所以,以上是編譯不通過的,要改進的方式,只有:

const int a = 40;  //c++編譯器把a放在符號表中

const int &m = 43; //c++編譯器 會 分配記憶體空間

在其前加個"const"就可以了,(這也是const和引用在一起的乙個特殊點!)一用const,編譯器會給m分配乙個記憶體空間,並將這個m指向"43",但"43"依舊沒記憶體空間。

字面量沒有記憶體空間,故沒有存放的記憶體位址,即使存在,也是**區中。這是在c++中乙個和c不一樣的地方。

//

struct teacher

;

常量引用作函式引數:

//void printteacher(const teacher  * const myt)

void printteacher(const teacher &myt)

常量引用讓變數擁有唯讀屬性,即寫了就不能讓輕易的改。

void main()

;//在被呼叫函式 獲取資源

int getteacher(teacher **p)

tmp = (teacher *)malloc(sizeof(teacher));

if (tmp == null)

tmp->age = 33;

// p是實參的位址 *實參的位址 去間接的修改實參的值

*p = tmp;

}//指標的引用 做函式引數

int getteacher2(teacher* &myp)

myp->age = 36;

}void freeteacher(teacher *pt1)

free(pt1);

}void main1201()

//2> 用字面量 初始化 常量引用

cout<<"hello..."

return ;}//

struct teacher

;//void printteacher(const teacher * const myt)

void printteacher(const teacher &myt)

void main()

011 指標的引用

指標的引用 if 1 struct teacher int getteacher teacher p teacher tmp tmp teacher malloc sizeof teacher 1 if tmp null tmp age 1111 p tmp p就像一把鑰匙,通過位址去開啟一扇門,p...

7 4 指標和引用

7.4.1指標的好處 1.可以動態分配記憶體。2.對多個相似變數進行一般訪問。3.為動態資料結構,尤其是樹和鍊錶提供支援 4.遍歷陣列,解析字串。5.高效的按引用複製陣列和結構。7.4.2 引用還是指標 1.指標本質是儲存位址的變數,指標則是 從一而終 的別名,且不能為空 2.作為引數傳遞,二者不同...

5 指標 引用的區別

函式傳值的三種方式 傳值 傳引用 傳指標 相同點 都是位址的概念 指標指向一塊記憶體,它的內容是所指記憶體的位址 引用是某塊記憶體的別名。區別 1.指標是乙個實體 在棧空間有自己的記憶體空間 而引用僅是個別名 不佔記憶體空間 2.引用使用時無需解引用 指標需要解引用 3.引用只能在定義時被初始化一次...