這一章在第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的可變大小的數組。內存