最近第二次學習c++ , 卻總是忘記const的一些用法, 所以記錄一下筆記
忒困!
A: const指針位於 * 的左邊
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指針位於 * 的右邊
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: const指針位於 * 的兩邊
C: cosnt修飾指針和指針指向的內容, 則指針和指針指向的內容都為不可變量;
左定值, 右定向, const修飾不變量
int a = 8; const int * const p = &a; printf("%d\n", *p);
D:(int*)a和int*a的區別
不一樣。(int*)a將指針變量a強制轉換為整型指針,說明a一般不是一個整型指針,也可以是個整型指針。int*a,定義一個整型指針變量a
E: 阿里面試題
阿里C++筆試題:const int a = 10;int * p = (int *)(&a);*p=20; 為什么結果是a=10,*p=20?
編譯器優化的結果,編譯器在處理 const int a = 10;
這句時 沒有為a分配內存賦值,而是在加入了符號表,后續引用a時有些類似#define a 10這樣處理了
int * p = (int *)(&a);這句則 配*p被強制賦值,所以指針有效指向了某個地址,所以出現了上述結果
F: const在成員函數后邊
由於電腦崩潰了, 所以那個網頁的內容找不到了, 沒記載, 以后補上
但總體想表達的意思呢, 就是, 成員函數后邊跟上const以后, 里面不能有修改的內容
參考鏈接: https://www.cnblogs.com/Forever-Kenlen-Ja/p/3776991.html