当前位置:网站首页>C語言0長度數組的妙用
C語言0長度數組的妙用
2022-06-27 11:06:00 【fhqlongteng】
1、0長度數組
0長度數組的意思是數組的長度為0,比如int a[0],它編譯後不占用內存空間,即sizeof(a) = 0。
C99規定可以為變長數組 int len ; int array[len];也就是說數組是程序運行時候才指定數組的大小。常見的是進行輸入數據進行初始化。
GCC直接支持零長度數組,int a[0];零長度數組有一個特點就是不占用內存空間。0長度數組很少單獨使用,一般是用在結構體中,不占用結構體長度,用於分配連續內存時使用。
2、0長度數組在結構體中的使用
0長度數組常用在結構體中,如下代碼就是一個結構體中帶有0長度數組。此結構體sizeof(struct rndis_query_msg) = 7個字=28個字節長度,OIDInputBuffer[0]在結構體中未占用空間。
/* Remote NDIS Query Message */
struct rndis_query_msg
{
rt_uint32_t MessageType;
rt_uint32_t MessageLength;
rt_uint32_t RequestId;
rt_uint32_t Oid;
rt_uint32_t InformationBufferLength;
rt_uint32_t InformationBufferOffset;
rt_uint32_t Reserved;
rt_uint8_t OIDInputBuffer[0];
};
typedef struct rndis_query_msg* rndis_query_msg_t;OIDInputBuffer主要用在分配內存時訪問結構體成員變量Reserved後面連續內存使用。比如要申請一個struct rndis_query_msg結構占用的內存空間,並且OIDInputBuffer指向的內存具有10個字節的空間可以使用。代碼可像如下編寫。
rndis_query_msg_t prndis = NULL;
prndis = malloc(sizeof(struct rndis_query_msg) + 10);
if(prndis)
{
for(i = 0; i < 10; i++)
{
prndis->OIDInputBufferp[i] = i;
}
}
/*如果此文對你有幫助,請我喝茶--加我vx:longtengweixin*/3、支持的編譯器
0長度的數組的寫法在IAR編譯器,GCC編譯器中支持。但是在keil編譯器默認是不支持的,即使打開C99的設置也不好使。keil軟件中需要在編譯選項中增加--gcc來支持才能編譯通過。

边栏推荐
猜你喜欢
随机推荐
防止被00后整顿?一公司招聘要求员工不能起诉公司
One copy ten, CVPR oral is accused of plagiarizing a lot
Uniform Asymptotics by Alexei
Memory compression for win10
Leetcode 729. 我的日程安排表 I(提供一种思路)
实验笔记之——CARMEN (.log .clf)文件转换为rosbag
Eureka核心源码解析
go-zero微服务实战系列(七、请求量这么高该如何优化)
If you find any loopholes later, don't tell China!
【TcaplusDB知识库】TcaplusDB系统用户组介绍
杰理之睡眠以后定时唤醒系统继续跑不复位【篇】
Openpyxl table reading instance
【TcaplusDB知识库】TcaplusDB-tcapsvrmgr工具介绍(一)
deep learning statistical arbitrage
.NET6接入Skywalking链路追踪完整流程
直播电子商务应用程序开发需要什么基本功能?未来发展前景如何?
Privacy computing fat offline prediction
Redis 分布式锁15问,看看你都掌握了哪些?
Proe/Creo家电产品结构设计规范-电煎锅
Red envelope rain: a wonderful encounter between redis and Lua




![[tcapulusdb knowledge base] Introduction to tmonitor background one click installation (II)](/img/0a/742503e96a9b51735f5fd3f598b9af.png)



