【问题标题】:How can I initialize a struct in C?如何在 C 中初始化结构?
【发布时间】:2021-01-31 16:43:56
【问题描述】:

我有两个结构(typedef)。

typedef struct      s_bitmapheader
{
    uint16_t bfType;
    uint32_t bfSize;
    uint16_t bfReserved1;
    uint16_t bfReserved2;
    uint32_t bfOffBits;
}                   t_bitmapheader;

typedef struct      s_bitmapinfo
{
    uint32_t bisize;
    int32_t  biwidth;
    int32_t  biheight;
    uint16_t biplanes;
    uint16_t bibitcount;
    uint32_t bicompression;
    uint32_t bisizeimage;
    int32_t  biXpelspermeter;
    int32_t  biYpelspermeter;
    uint32_t biclrused;
    uint32_t biclrimportant;
}                   t_bitmapinfo;

主要是我必须初始化它们。

首先,我尝试了这个:

t_bitmapheader  filehdr = { 0 };
t_bitmapinfo    infohdr = { 0 };

它有效,但我必须找到另一种方法来做到这一点。

t_bitmapheader  filehdr;
t_bitmapinfo    infohdr;

filehdr = { 0 };
infohdr = { 0 };

P.S:我必须像第二个代码一样在另一行中初始化它们。

谢谢。

【问题讨论】:

  • 提示:bzero()memset()。对于归零不足的重要情况,通常会看到 init_X()make_X() 类型的函数分别初始化或分配和初始化。
  • "initialization""assignment" 是不同的概念。您确实在寻找“分配”,因为您已经知道如何正确初始化为零。
  • 谢谢大家的帮助我找到了答案

标签: c data-structures struct initialization


【解决方案1】:

您可以使用compound literals 生成匿名结构。

t_bitmapheader  filehdr;
t_bitmapinfo    infohdr;

filehdr = (t_bitmapheader){ 0 };
infohdr = (t_bitmapinfo){ 0 };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    相关资源
    最近更新 更多