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...