简体   繁体   中英

Initialize a struct in C

What I want to do is simply initialize a instance of a 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======

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?

The tName definition is here

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. 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};
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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