社区
C语言
帖子详情
为啥说“把单一元素的数组放在一个struct的尾端,则每个struct objects就拥有了可变大小的数组
zjpixyniannian
2006-02-08 12:01:12
如:
strcut mumble{
char pc[1];
};
.....
strcut mumble * pmumbl = (struct mumble *)
malloc(sizeof(struct mumble) + strlen(string) + 1);
strcpy(pmumbl->pc, string);
?????
...全文
472
2
打赏
收藏
为啥说“把单一元素的数组放在一个struct的尾端,则每个struct objects就拥有了可变大小的数组
如: strcut mumble{ char pc[1]; }; ..... strcut mumble * pmumbl = (struct mumble *) malloc(sizeof(struct mumble) + strlen(string) + 1); strcpy(pmumbl->pc, string); ?????
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
FigoZhu
2006-02-08
打赏
举报
回复
楼上说得太好了。
主要是利用C的指针很灵活,另外malloc一个比该结构大的SIZE的内存,这个数组就是后面动态部分的首地址。
寻开心
2006-02-08
打赏
举报
回复
利用了下面的几个知识:
1 c/c++当中指针的灵活性,指针相互之间是可以做转换的,没有类型条件限制,内存地址可以按照不同类型的数据来解释
2 struct 对象在内存当中的布局
malloc只负责分配一块指定大小的内存,并不做其他的事情,然后把内存的首地址返回
malloc关键词前面的(struct mumble *)强制类型转换,把这块内存转换为mumble类型数据了
实际上分配的内存要比一个mumble结构要大
memcpy这个函数是做内存当中数据的copy,它同样不检测数据的类型,即便是copy的数据超越了内存大小。
这个例子利用的也是这一点,把string当中的大量数据,copy到了mumble的pc变量所在的地址当中
因为malloc给这个地址分配了足够多的空间,copy超过1个char的数据到这里也不会产生实际的内存越界
后面对mumble.pc[n] n>0 的访问,也是在malloc分配的空间当中,不会有异常
从c/c++的语法规范角度来说,上面的处理是不好的
但是作为其中的指针的灵活性的应用来说是可行的
c/c++当中的指针是所有语言当中最具有灵活性的,同时它也是最危险的
是可以利用指针做很多有趣的事情,但是必须要清楚一旦使用不当,造成的危害也是非常严重的
C++使
struct
对象
拥有
可变
大小
的
数组
(详解)
把
单一
元素
的
数组
放在
一个
struct
的
尾端
,于是
每个
struct
object
s 可以
拥有
可变
大小
的
数组
:
struct
mumble { char pc[1]; }; //获取
一个
字符串,然后为
struct
本身和该字符串配置足够的内存
struct
mumble *pmumbl...
把
单一
元素
的
数组
放在
一个
struct
的
尾端
,则
每个
struct
object
s就
拥有
了
可变
大小
的
数组
标题是《深度探索C++对象模型》(《Inside The C++
Object
Model》)中的一句话,其中给出的例子如下: strcutmumble{ charpc[1]; }; strcutmumble*pmumbl=(
struct
mumble*) malloc(sizeof(
struct
mumble)+strlen...
C语言技巧:把
单一
元素
的
数组
放在
末尾,
struct
可以
拥有
可变
大小
的
数组
例如把
单一
元素
的
数组
放在
一个
struct
的末尾,于是
每个
struct
object
s可以
拥有
可变
数组
的
数组
:
struct
mumble { /* stuff */ char pc[1]; }; //从文件或标准输入装置中取得
一个
字符串 //然后为
struct
本身和该...
关于理解《C++ 对象模型》中:把
单一
元素
的
数组
放在
末尾,
struct
可以
拥有
可变
大小
的
数组
...
这一章在第19页,写的好深奥,我竟然没看明白在...例如把
单一
元素
的
数组
放在
一个
struct
的末尾,于是
每个
struct
object
s可以
拥有
可变
数组
的
数组
:
struct
mumble { /* stuff */ char pc[1]; }; //从文件或...
c语言结构体
数组
长度
可变
,C++使
struct
对象
拥有
可变
大小
的
数组
(详解)
首先摘录《Inside The C++
Object
Model》中的一段话:把
单一
元素
的
数组
放在
一个
struct
的
尾端
,于是
每个
struct
object
s 可以
拥有
可变
大小
的
数组
:
struct
mumble {char pc[1];};//获取
一个
字符串,然后为
struct
本身...
C语言
70,024
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章