如何将结构初始化为空?

twi*_*lco 4 c struct

我有一个包含两个相同类型的其他结构的结构,我想初始化它以让两个 NULL 开始。我怎么做?我已经尝试了以下方法,但是使用 gcc 收到编译器警告。

#include <stdio.h>

typedef struct Segment {
    int microseconds;
} Segment;

typedef struct Pair {
    Segment mark;
    Segment space;
} Pair;

int main()
{
    Pair mark_and_space = { .mark = NULL, .space = NULL };

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

和编译器警告:

main.c:14:5: warning: initialization makes integer from pointer without a cast [enabled by default]                                                   
 Pair mark_and_space = { NULL,  NULL };                                                                                                           
 ^                                                                                                                                                
main.c:14:5: warning: (near initialization for 'mark_and_space.mark.microseconds') [enabled by default]                                               

main.c:14:5: warning: initialization makes integer from pointer without a cast [enabled by default]                                                   
main.c:14:5: warning: (near initialization for 'mark_and_space.space.microseconds') [enabled by default] 
Run Code Online (Sandbox Code Playgroud)

Cha*_*tka 5

你不能。NULL 是一个指针,其值设置为零,但您的markspace属性不是指针值。在您拥有的代码中,它们都是值类型,作为Pair结构的一部分分配。

将变量更改为Segment *而不是Segment,您将能够将它们设置为 NULL。


Yun*_*sch 5

为了初始化两个子结构,每个子结构都包含一个int最接近的成员NULL,即将所有整数初始化为“0”,您可以使用以下代码:

#include <stdio.h>

typedef struct Segment {
    int microseconds;
} Segment;

typedef struct Pair {
    Segment mark;
    Segment space;
} Pair;

int main(void)
{
    Pair mark_and_space = { {0}, {0} };

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果你想将它们初始化为 NULL,假设你想到了指针,这是唯一可以干净地初始化为 NULL 的东西,那么请参阅其他答案,基本上说“如果你想初始化为指针值,那么 init指针,而不是整数”。