C 的引用與常量

2021-09-05 13:07:02 字數 1559 閱讀 3991

int a = 10;

int& b = a;

其實在編譯時,編譯器會將「 int& b = a 」 變為 「 int* const b = &a 」;

由於int* const 所修飾的變數必須要賦初值,且由於const 修飾的 b ,所以表示b指標是無法修改的,即b指標無法指向另乙個指標,所以這也驗證了引用必須賦初值的原因。

附:關於如何引用陣列

//方法1 -- 比較好理解,把陣列定義為一種型別,直接用(int& b = a)的方式進行

typedef int arr_ref[10];

int arr[10];

arr_ref& ref = arr;

//方法2 -- 比較方便

int arr[10];

int (&ref)[10] = arr;

一、關於 int* const a 和 const int* a 的區別,雖然很基礎的問題,但是對於初學者來說實在頭疼。

int* const a ,是const 修飾 a,所以a指標不可變,也可以把簡單的把它看成引用,即和引用一樣。指標不能改變,而所指的內容卻是可以變的。如下:

int a = 10;

int& b = a;

b = 11;

int d = 20;

int* const c = &d; //這裡其實和int &c = d ;一樣,只是表達方式若有不同

*c = 12;

cout << " b = " <

得到的結果為同樣的const int * a 則是 const 修飾的是int* a,即 a 所指的內容不可變,但是 a 的指標卻是可以變的,如下:

int a = 10;

int* const c = &a ;//c不能改變,即指標不能變;

*c = 11;

const int* d = &a;//d值不能變 指標可變 (直接與int* const c 做對比)

int b = 12;

d = &b;

cout << *c << endl;

cout << *d << endl;

得到的結果為二、const修飾的資料也是可以改變的

如下 const 的資料仍是可以改變的:

int b = 10; //此時 b 已經在堆疊中占有一塊區域,而不是常量池

const int a = b;

int* p = (int*) &a; //通過指標就可直接更改內容

(*p)++;

同理,用這種方式修飾的類或結構體,仍是可以修改內容。

struct pa

const pa p;  //在堆疊中建立了一塊區域,而不是常量池

= 50; //由於const 修飾 a 是不可直接修改

pa* p = (pa*)&p; //指標間接修改

p->a = 100;

以上只是大概的示例,僅供參考。

C 引用與常量

一 引用 1.引用格式 a.型別名 變數名 另乙個變數 b.試例 includeusing namespace std intmain 2.常引用 int n const int r n 然後呢,r就不能用來改n了 二 常量 1.基本用法 const int n 12 2.常量指標 const in...

c 的引用 常量引用

c 中的引用不用考慮太多解引用的東西 include using namespace std void func int ref intmain 在c 中,int ref a等價於int const ref a,也就是說ref直接存的是a的位址。但是實際上想要對ref的值進行修改的話,是不需要解引用...

C 常量引用與臨時變數

由 練習7.49 b 產生出來的小問題。總結 1.不要對臨時變數進行改變。要傳遞臨時變數,得用常量引用。2.當引用不需要更改時,用const引用。問題 struct sales data sales data combine sales data sales data sales data comb...