我有一个包含两个相同类型的其他结构的结构,我想初始化它以让两个 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)
你不能。NULL 是一个指针,其值设置为零,但您的mark和space属性不是指针值。在您拥有的代码中,它们都是值类型,作为Pair结构的一部分分配。
将变量更改为Segment *而不是Segment,您将能够将它们设置为 NULL。
为了初始化两个子结构,每个子结构都包含一个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指针,而不是整数”。
| 归档时间: |
|
| 查看次数: |
17049 次 |
| 最近记录: |