C 12 經典問題解析 一

2021-09-13 01:50:24 字數 1918 閱讀 1502

const 什麼時候為唯讀變數?什麼時候為常量?

在編譯期間不能直接確定初始值的 const 識別符號,都被作為唯讀變數處理。

#include /**

* 使用常量初始化 const 引用,得到唯讀變數,進入符號表

*/void code_1()

/** * 被 volatile 修飾的 const 識別符號仍為唯讀變數,不會進入符號表

*/void code_2()

/** * 使用變數初始化的 const 識別符號仍為唯讀變數,不會進入符號表

*/void code_3()

/** * const 引用的型別與初始化變數型別不同那個,得到乙個新的唯讀變數

*/void code_4()

int main()

輸出:

x = 1

rx = 5

nrx = 5

&x = 0xbfaf2cac

&rx = 0xbfaf2cac

&nrx = 0xbfaf2cac

--------

y = 6

p = 0xbfaf2cac

--------

z = 7

p = 0xbfaf2ca8

--------

c = a

rc = a

trc = c

引用與指標有什麼關係? 如何理解」引用的本質就是指標常量「?

引用只是乙個變數的新名字

從 c++ 編譯器的角度來看

下面的**有問題嗎?

int a = 1;

int b = 2;

int* pc = new int(3);

int& array = ;

test_1.cpp

#include int a = 1;                    // 全域性資料區

struct sv

;int main()

; printf("&sv.x = %p\n", &sv.x);

printf("&sv.y = %p\n", &sv.y);

printf("&sv.z = %p\n", &sv.z);

delete pc;

return 0;

}

輸出:

&sv.x = 0x804a020

&sv.y = 0xbf91ef4c

&sv.z = 0x873d008

test_2.cpp

#include int a = 1;                    // 全域性資料區

int main()

; delete pc;

return 0;

}

輸出:

in function 『int main()』:

error: declaration of 『array』 as array of references

c++ 中為什麼不支援引用陣列呢?

c 陣列是記憶體中的一塊連續的儲存空間,每個元素在記憶體順序相鄰存放,c++需要遵守並支援。當陣列中的每個元素為引用即引用陣列,破壞了這一特性。

第12課 經典問題解析一

本文內容取自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 const 什麼時候為 唯讀變數?什麼時候是常量?const 常量的判別準則 在編譯期間不能直接確定初始值的 const 識別符號,都被作為唯讀變數處理。const 引用的型別與初始化變數的型別 程式設計實驗 const典型問題分析...

第12課 經典問題解析一

const 什麼時候為唯讀變數?什麼時候為常量?1.1 const常量的判別標準 1 只有用字面量初始化的 const 常量才會進入符號表,如 const int i 0 工作在程式的編譯時期,可以確認初始值為0 2 使用其它變數初始化的 const 常量仍然是唯讀變數,如 const int i ...

lessons 12 經典問題解析

1 只有用字面量初始化的const常量才會進入符號表,是真正意義上的常量,例如 const int a 2 a是真正意義上的常量 2 使用其他變數初始化的const常量任然是唯讀變數,例如 int x 1 const int y x y是唯讀變數 3 被volatitle volatile告訴編譯器...