在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
这一章在第19页,写的好深奥,我竟然没看明白在说什么~~之后再看了几遍,终于明白了。 原文: 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已经分配了足够的内存,因此只要赋值即可,也就达到了可变大小数组的意思。 但是,C++中的类可不同。 class stumble{ public: //operations ... protected: //protected stuff private: /* private stuff */ char pc[1]; }; C++中 public、protected、private内的声明顺序可以被保证,但是这三个关键字的布局是不同的。因此总的排列顺序并不能被保证。因此,不能实现struct的可变大小的数组。
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论