c - 声明 BufferData Data[16] = {0} 是什么意思
问题描述
我正在浏览一个 C dll 并遇到了一个结构
BufferData{int Len; int Ant; unsigned char Data[512]}
然后通过创建一个数组来初始化该结构
BufferData Data[16] = {0}
鉴于 Data 是一个结构数组,我不确定这是做什么的。
解决方案
这是 C 初始化程序的一个怪癖。C 没有“半初始化”变量;变量未初始化或完全初始化。
如果初始化器指定的值少于结构或数组的成员,则所有剩余元素都递归地隐式初始化为零。
因此{0}
是一个通用初始化程序:它将第一个字段(无论可能是什么)设置为,0
并且所有剩余的字段(如果有)也自动设置为0
。
在您的情况下,第一个字段是 的第一个元素的第一个成员Data
,即我们明确设置Data[0].Len
并依赖于其他所有内容的零初始化。
推荐阅读
- groff - Groff Eqn - 如何做更高的根(立方根等)
- c# - Azure Blob 存储授权
- google-apps-script - 例外:数据验证规则的项目数超过了 500 的限制。请改用“范围列表”条件
- c# - Simple Injector 在注册后缺少一种开放的泛型类型 - 可能会发生什么?
- laravel - 多对多关系的分页
- reactjs - 如何使用反应钩子切换
- c# - 无法使用 HttpWebRequest 与服务器协商 HTTPS 连接
- php - 如何在 Controller 中将 AND 附加到我的 Laravel 查询
- stripe-payments - Stripe 结帐付款无法支付
- python - 如何将python库安装到特定环境(没有conda)