首页 技术 正文
技术 2022年11月6日
0 收藏 549 点赞 1,008 浏览 707 个字

这一章在第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(字符串结束符)如下图所示。

关于理解《C++ 对象模型》中:把单一元素的数组放在末尾,struct可以拥有可变大小的数组

    通过strcpy,将string字符串拷贝给mumble.pc,pmumble已经分配了足够的内存,因此只要赋值即可,也就达到了可变大小数组的意思。

  但是,C++中的类可不同。      

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

  C++中 public、protected、private内的声明顺序可以被保证,但是这三个关键字的布局是不同的。因此总的排列顺序并不能被保证。因此,不能实现struct的可变大小的数组。

  

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,090
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,567
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,415
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,187
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,823
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,906