简体   繁体   English

在C中初始化结构

[英]Initialize a struct in C

What I want to do is simply initialize a instance of a struct. 我想要做的只是初始化一个struct的实例。 The struct is defined here: 结构在这里定义:

typedef struct Rectangle 
{
tName Name; /* name of the rectangle */
struct Rectangle * binSon[2];
int Center[2];
int Length[2]; /* distance to the boarder of the rectangle */
int Label;
}Rectangle;

and how I initialized it is like below: 以及我如何初始化它如下所示:

Rectangle * binSon[2];
binSon[0] = NULL;
binSon[1] = NULL;

int Center[2];  
int Length[2];

Center[0] = 0;
Center[1] = 0;
Length[0] = 5;
Length[1] = 5;

Rectangle world = {"World", binSon, Center, Length, 0};

at the last line, when I compile the program, it reports me an warning of: 在最后一行,当我编译程序时,它向我报告一个警告:

mx_cif_ds_manager.c:52:2: warning: initialization makes integer from pointer without a cast [enabled by default]
mx_cif_ds_manager.c:52:2: warning: (near initialization for 'world.Name[0]') [enabled by default]
mx_cif_ds_manager.c:52:2: warning: initialization makes integer from pointer without a cast [enabled by default]
mx_cif_ds_manager.c:52:2: warning: (near initialization for 'world.Name[1]') [enabled by default]
mx_cif_ds_manager.c:52:2: warning: initialization makes integer from pointer without a cast [enabled by default]
mx_cif_ds_manager.c:52:2: warning: (near initialization for 'world.Name[2]') [enabled by default]
mx_cif_ds_manager.c:52:2: warning: initialization makes integer from pointer without a cast [enabled by default]
mx_cif_ds_manager.c:52:2: warning: (near initialization for 'world.Name[3]') [enabled by default]

Not sure what's going wrong with this piece of program, and wondering if any one has any idea or suggestion that can help me improve this piece of code. 不知道这个程序出了什么问题,并想知道是否有任何人有任何想法或建议可以帮助我改进这段代码。 Whats a more gental way to initialize a struct? 什么是初始化结构的更基础的方法?

Thank you 谢谢

======UPDATE====== ====== UPDATE ======

Thank you for your help, but what if I want to use variables to initialize a struct. 感谢您的帮助,但如果我想使用变量来初始化结构,该怎么办呢? Do I have to malloc a memory space in this case? 在这种情况下我是否需要malloc内存空间?

The tName definition is here tName定义在这里

typedef char tName[MAX_NAME_LEN + 1];

这应该工作:

Rectangle world = {"World", {NULL, NULL}, {0, 0}, {5, 5}, 0};

更简单:

Rectangle world = { "World", { NULL, NULL }, { 0, 0 }, { 5, 5 }, 0 };

To expand on Keith's answer, you could also do this to use your variables if you wanted. 要扩展Keith的答案,您也可以根据需要使用变量。 Note this is only valid if you are within a function. 请注意,这仅在您在函数内时才有效。

void foo(void)
{
    Rectangle world = {"World", {binSon[0], binSon[1]}, {Center[0], Center[1]}, {Length[0], Length[1]}, 0};
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM