c++ const 用法總結


最近第二次學習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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM