關於理解《C++ 對象模型》中:把單一元素的數組放在末尾,struct能夠擁有可變大小的數組

這一章在第19頁,寫的好深奧,我居然沒看明白在說什麼~~以後再看了幾遍,終於明白了。c++

原文:程序員

C程序員的巧計有時候卻成爲c++程序員的陷阱。例如把單一元素的數組放在一個struct的末尾,因而每一個struct objects能夠擁有可變數組的數組:
struct mumble
{
      /* stuff */
      char pc[1];  
};

//從文件或標準輸入裝置中取得一個字符串
//而後爲struct 自己和該字符配置足夠的內存

struct mumble * pmumbl = (struct mumble*)
             malloc(sizeof(struct mumble) + strlen(string) +1);
strcpy(&mumble.pc,string);

  如此深奧,他到底想要表達什麼?數組

  首先,結構體的末尾定義了一個char數組,只分配了1個字符。那怎麼能說是可變大小數組。函數

  往下看,他用malloc函數分配了一堆的內存。大小爲結構體+字符串+1(字符串結束符)以下圖所示。佈局

      

    經過strcpy,將string字符串拷貝給mumble.pc,pmumble已經分配了足夠的內存,所以只要賦值便可,也就達到了可變大小數組的意思。spa

  可是,C++中的類可不一樣。      blog

class stumble{
public:
     //operations ...
protected:
   //protected stuff
private:
    /* private stuff */
    char pc[1];
};

  C++中 public、protected、private內的聲明順序能夠被保證,可是這三個關鍵字的佈局是不一樣的。所以總的排列順序並不能被保證。所以,不能實現struct的可變大小的數組。內存

相關文章
相關標籤/搜索