C 中的引用

2021-10-02 18:28:51 字數 2736 閱讀 9878

引用有自己的儲存空間嗎?

引用在c++中的內部實現是乙個常指標

當函式返回值為引用時

c++對三目運算子做了什麼?

在c++中新增加了引用的概念

引用可以看作乙個已定義變數的別名

引用的語法:type& name = var;

#include int main(int argc, char *ar**)

執行結果:

注意:普通引用在宣告時必須用其它的變數進行初始化。

引用的意義:

引用作為其它變數的別名而存在,因此在一些場合可以代替指標

引用相對於指標來說具有更好的可讀性和實用性

注意:引用作為函式引數宣告時不進行初始化。

在c++中可以宣告const引用

const type& name = var;

const引用讓變數擁有唯讀屬性(不能出現在賦值符號的左邊)

a:用指標

當使用常量對const引用進行初始化時,c++編譯器會為常量值分配空間,並將引用名作為這段空間的別名

使用常量對const引用初始化後將生成乙個唯讀變數。

#include int main()

引用既然是變數的別名,那麼引用有自己的儲存空間嗎?

#include struct tref

;int main(int argc, char *ar**)

執行結果:

分析:證明引用有自己的儲存空間。

type& name type* const name

improtance:

c++編譯器在編譯過程中使用常指標作為引用的內部實現,因此引用所占用的空間大小與指標相同。

從使用的角度,引用會讓人誤會其只是乙個別名,沒有自己的儲存空間。這是c++為了實用性而做出的細節隱藏。

void f(int& a)

//等價於

void f(int* const a)

#include

using

namespace std;

struct tref

;int

main()

; cout <<

&a << endl;

cout <<

&b << endl;

cout <<

&c << endl;

//a,b,c的記憶體位址是連續的,相差4位元組

cout <<

&ra << endl;

//&ra與&c相差恰好12個位元組

若返回棧變數

不能成為其它引用的初始值

不能作為左值使用

若返回靜態變數或全域性變數

可以成為其他引用的初始值

即可作為右值使用,也可作為左值使用

引用的實質是指標,返回區域性變數的引用相當於 返回區域性變數的指標。

當三目運算子的可能返回都是變數時,返回的是變數引用

當三目運算子的可能返回中有常量時,返回的是值

int a = 1;

int b = 2;

(a < b ? a : b) = 3; //正確,返回a或b的引用,可以作為左值使用

(a < b ? 11 : b) = 3; //錯誤,可能返回中有常量,返回的是值,不能作為左值使用

C 中的引用

最近重新看c 看到些以前沒注意的dd,溫故而知新,暫且記下。引用是能自動間接引用的一種指標,即不必使用間接引用運算子 就可以得到乙個引用值。引用可以為變數起別名,它主要用作函式引數以及函式的返回型別。1 引用的定義 如 int i int j i j是i的引用。1 定義引用時,必須立即對它進行初始化...

C 中的引用

例1 int a int ra a 定義引用ra,它是變數a的引用,即別名 說明 1 在此不是求位址運算,而是起標識作用。2 型別識別符號是指目標變數的型別。3 宣告引用時,必須同時對其進行初始化。4 引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數...

C 中的引用

引用是c 引入的新語言特性,是c 常用的乙個重要內容之一,正確 靈活地使用引用,可以使程式簡潔 高效。我在工作中發現,許多人使用它僅僅是想當然,在某些微妙的場合,很容易出錯,究其原由,大多因為沒有搞清本源。故在本篇中我將對引用進行詳細討論,希望對大家更好地理解和使用引用起到拋磚引玉的作用。一 引用簡...