typedef引起的bug

typedef你用錯了麼?

標籤(空格分隔):c/c++


  • 先看一段正常的代碼

    [test1.cpp]

    #include "test.h"
    
    int main()
    {
        char  s[4] = "asd";
        const char *ctr = s;
    
        ctr = "ksd";
    
        return 0;
    }
    

  const表示我們不能通過ctr改變s數組的值(提個醒,數組都是底層const,不過跟這個問題沒關係)。

  • 下面的代碼是正確的嗎?

    [test2.cpp]

    #include "test.h"
    typedef char * pstring;
    
    int main()
    {
        char s[4] = "asd";
        const pstring ctr = s;
    
        ctr = "lks";
    
        return 0;
    }
    

    請看下面的執行結果

      error提示表示當前的ctr是一個只讀變量,好像ctr是一種頂層const修飾的變量。爲什麼呢?因爲上述test2.cpp代碼中,pstring表示char型指針,也就是說pstring的類型是指針。那麼, const pstring 就是一個常量指針,當然不能修改該指針存儲的地址。我們再看test1.cpp中的 const char *ctr ,如果拆分來看的話ctr從右向左分析,*ctr是一個整體,而const char成爲基本的數據類型,即 const char *ctr 表示的是一個指向char類型常量的指針

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章