最近第二次學習c++ , 卻老是忘記const的一些用法, 因此記錄一下筆記html
忒困!c++
A : const 修飾指針指向的內容, 則內容爲不可變量但指針可變;
面試
稱其爲左定向, const 位於 * 的左邊函數
int i = 10; int j = 20; const int *p = &i; printf("%d\n", *p); p = &j; // it's ok *p = 30; // it's error i = 39; // it's ok printf("%d\n", *p);
B: const 修飾指針, 則指針爲不可變量; 能夠改變值, 但不能改變地址
稱其爲右定向, const 位於 * 的右邊學習
int a = 8; int * const p = &a; *p = 9; int b = 7; // it's error p = &b; // it's error printf("%d\n", *p); printf("%d\n", a); // a也變成9 了
C: cosnt修飾指針和指針指向的內容, 則指針和指針指向的內容都爲不可變量;
左定值, 右定向, const修飾不變量優化
int a = 8; const int * const p = &a; printf("%d\n", *p);
不同。(int*)a將指針變量a強制轉換爲整型指針,說明a通常不是一個整型指針,也能夠是個整型指針。int*a,定義一個整型指針變量a
阿里C++筆試題:const int a = 10;int * p = (int *)(&a);*p=20; 爲何結果是a=10,*p=20?spa
編譯器優化的結果,編譯器在處理 const int a = 10;
這句時 沒有爲a分配內存賦值,而是在加入了符號表,後續引用a時有些相似#define a 10這樣處理了
int * p = (int *)(&a);這句則 配*p被強制賦值,因此指針有效指向了某個地址,因此出現了上述結果
因爲電腦崩潰了, 因此那個網頁的內容找不到了, 沒記載, 之後補上指針
但整體想表達的意思呢, 就是, 成員函數後邊跟上const之後, 裏面不能有修改的內容code
參考連接: https://www.cnblogs.com/Forever-Kenlen-Ja/p/3776991.htmlhtm