修改const唯讀變數,只能修改區域性常量,不能修改全域性靜態常量。
例如:
// 某函式內部
const
int const_value =
100;
int* ptr =
(int*)
&const_value;
*ptr =
200;
因為在函式內部宣告的 const_value,其本質上還是乙個函式內的區域性變數,儲存區在該函式的棧幀內,而程式對該記憶體區擁有修改的許可權。
相應地,用同樣方法試圖修改全域性或靜態常量資料的值,如下所示:
char
* pc =
(char
*)const_data;
*pc =
'x';
編譯器並不會報告任何錯誤,編譯可以通過。但當程式執行到第二行**時,就會因為 segment violation 而崩潰,原因在於程式對該位置的記憶體區沒有修改許可權。 const 修飾的唯讀變數
const 修飾的唯讀變數必須在定義的同時初始化 編譯器通常不為普通const 唯讀變數分配儲存空間,而是將它們儲存在符號表中,這使 得它成為乙個編譯期間的值,沒有了儲存與讀記憶體的操作,使得它的效率也很高。例如 define m 3 巨集常量 const int n 5 此時並未將n 放入記憶體中...
iOS 修改唯讀變數
在ios中唯讀變數是不應該被修改的,特別是框架類的唯讀變數,修改了可能帶來莫名其妙的錯誤 但是不應該不等於不能,通過動態執行時還是可以修改的 比如 inte ce reonlyobject nsobject property nonatomic,readonly nsnumber number en...
修改const變數
宣告 不同於c語言的const變數修改問題 可以通過指標間接修改const變數的值 這裡只討論c 裡的const。c const 修飾符,表示常量,即如果以後保證不會修改則宣告為const,否則若要修改,那一開始為什麼還要宣告為const呢?根據c 標準,對於修改const變數,屬於 未定義行為 指...