天天看點

對const和引用的新了解一:const專題:二.引用專題

一:const專題:

在c語言中,const實際是一個冒牌貨,例如,const int a=10;a是一個隻讀的常量,通過指針可以繞過去

在c+中,通過const 修飾的東西,會變成什麼樣子?

1.const int a=10;放入符号表裡,始終從符号表裡拿資料,a變成真正意義上的常量10

key value
a 10

c++裡面的符号表

1.通過代碼來了解

const int a;

int const b;

const int *c;

int * const d;

const int * const e ;

含義:

//第一個第二個意思一樣 代表一個常整形數

//第三個 c是一個指向常整形數的指針(所指向的記憶體資料不能被修改,但是本身可以修改)

//第四個 d常指針(指針變量不能被修改,但是它所指向記憶體空間可以被修改)

//第五個 e一個指向常整形的常指針(指針和它所指向的記憶體空間,均不能被修改)

結論:

C語言中的const變量:

C語言中const變量是隻讀變量,有自己的存儲空間

C++中的const常量:

可能配置設定存儲空間,也可能不配置設定存儲空間  

當const常量為全局,并且需要在其它檔案中使用

當使用&操作符取const常量的位址

符号表、編譯過程中若發現對const使用了extern或者&操作符,則給對應的常量配置設定存儲空間(相容C)

例子代碼:

int main()

{

const int a = 10;

int *p = (int*)&a; 

printf("a===>%d\n", a);

*p = 11;

printf("a===>%d\n", a);

printf("Hello......\n");

return 0;

}

C++中的const常量類似于宏定義

const int c = 5; ≈ #define c 5

C++中的const常量在與宏定義不同

const常量是由編譯器處理的,提供類型檢查和作用域檢查

宏定義由預處理器處理,單純的文本替換

二.引用專題

1、 引用是C++的概念,屬于C++編譯器對C的擴充

int main()

{

int a = 0;

int &b = a; //int * const b = &a

     b = 11;  //*b = 11;

return 0;

}

2. 普通引用有自己的空間嗎?//有

struct Teacer {

int &a;

int &b;

};

int main()

{

printf("sizeof(Teacher) %d\n", sizeof(Teacer));

system("pause");

return 0;

}

3.當實參傳給形參引用的時候,隻不過是c++編譯器幫我們程式員手工取了一個實參位址,傳給了形參引用(常量指針)

對const和引用的新了解一:const專題:二.引用專題