C語言中的const並不是真正意義上的const,C語言中const變數是只讀變數,有自己的存儲空間,在C語言中,仍然可以通過間接賦值修改a的值。 實際上,在C++語言中,const建立的是一個符號表。用指針間接賦值的時候,會重新開闢一塊記憶體空間,間接修改a的值只是修改了,新開闢的記憶體空間的值,和原 ...
1 const int a; 2 int const b; //一樣 3 // 4 const int *c; //const修飾的是指針所指向的記憶體空間d的數據,不能被修改 5 int * const d; /*d 常指針(指針變數不能被修改(d不能亂指),但是它所指向記憶體空間可以被修改)*/ 6 const int * const e ;//指針和它所指向的記憶體空間,均不能被修改
C語言中的const並不是真正意義上的const,C語言中const變數是只讀變數,有自己的存儲空間,在C語言中,仍然可以通過間接賦值修改a的值。
void main() { //好像 a 是一個常量 const int a = 10; //a = 11; int *p = NULL; p = (int *)&a; *p = 20; //間接賦值 printf("a:%d \n", a); printf("*p:%d \n", *p); system("pause"); }
實際上,在C++語言中,const建立的是一個符號表。用指針間接賦值的時候,會重新開闢一塊記憶體空間,間接修改a的值只是修改了,新開闢的記憶體空間的值,和原來的符號表中的a的值沒有任何關係。
所以C++中的const才是真正意義上的const
C++中的const修飾的,是一個真正的常量,而不是C中變數(只讀)。在const修飾的常量編譯期間,就已經確定下來了。