c语言整形怎么变长,变长数组怎样操作?

本文主要讲解了C语言中如何利用变长数组优化内存分配,避免碎片,以及通过技巧实现连续内存空间。讨论了变长数组在节省空间、连续内存使用上的优势,并给出了实例说明。同时提到了不同操作系统动态内存分配的差异性及其对内存优化的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个是C的问题,跟面向对象根本没有任何关系,不要牵扯到面向对象!

typedef struct tagBITMAPINFO { // bmi

BITMAPINFOHEADER bmiHeader;

RGBQUAD bmiColors[1];

} BITMAPINFO;

RGBQUAD bmiColors[1]; //这是保留位置的用法,也没啥特殊,就占1个位置,然后整个结构的内容作为一个整体传送,

这就不需要去管bmiColors的占用地址了。

使用变长数组可以减少内存的碎片,可以节省的应该还不止一个指针的空间,有时候是可以节省很多空间的。因为不同的

操作系统对动态内存分配的支持可能不相同,一般申请的字节数和系统开销的字节数不会相等,比如你只要求几个字节,

系统可能还是要给你512字节。在这种情况下,节省的还是挺多的。

因为一般情况下如果采用指针的形式(这里是指一般情况下),那么空间就不是连续的,而数组在空间上却是连续的。

不过也可以用指针实现空间的连续性,只是这里涉及到一些技巧。

举个例子吧:

//here is an example ...

struct _t {

size_t size;

char *s; //这里换成是指针,而不是象楼主的例子一样是char s[1];

};

char str[] = "12345678910",;

t = (struct _t *)malloc(sizeof (struct _t) + strlen(str) + 1);

t->size = 10;

t->s = (char *)t + sizeof(struct _t);

strncpy(t->s, "12345678910", t->size - 1);

free(t); //只要一次释放就可以

//...

这样也可以啊。只要申请一次,释放一次,空间实现了连续性!

变长数组是个非常灵活的东东,需要的技巧性也比较强些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值