C语言变长数组

本文探讨了C语言中的变长数组,解释了如何在结构体中使用0长度数组实现动态内存分配。通过示例代码展示了变长数组在结构体中不占用内存的情况,并阐述了其用途和用法,强调了数组名在编译器中代表的是一个偏移量而非指针。

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

看如下代码:

#include<stdio.h>
typedef struct {
int len;
int array[];
}SoftArray;
int main() {
int len = 10;
printf("The struct's size is %d\n",sizeof(SoftArray));
return 0;
}

运行结果:

[root@VM-0-7-centos mydoc]# ./a.out
The struct's size is 4

我们可以看出,_SoftArray结构体的大小是4,显然,在32位操作系统下一个int型变量大小刚好为4,也就说结构体中的数组没有占用内存。为什么会没有占用内

存,我们平时用数组时不时都要明确指明数组大小的吗?但这里却可以编译通过呢?这就是我们常说的动态数组,也就是变长数组。

先不要乱,让我们再看一段代码

#include<stdio.h>
#include<malloc.h>
typedef struct {
int len;
int array[];
}SoftArray;
int main() {
int len = 10;
SoftArray *p=(SoftArray*)malloc(sizeof(SoftArray) + sizeof(int)*len);
printf("SoftArray size is %d\n", sizeof(SoftArray));
free(p);
return 0;
}

运行结果:

[root@VM-0-7-centos mydoc]# ./a.out
SoftArray size is 4<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值