关于理解《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的可变大小的数组。内存

相关文章
相关标签/搜索