这一章在第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的可变大小的数组。内存