假设有一个结构'联系人'它有两种不同的结构。
struct Name {
char firstName[31];
char lastName[36];
};
struct Numbers {
char cell[15];
char home[15];
};
struct Contact {
struct Name name;
struct Numbers numbers;
};
现在,我将仅通过int main()中的Contact变量初始化所有两个嵌套结构(Name,Numbers)。
struct Contact contact[2] =
{ {"Jay", "Greene"}, {14, 15},
{"Jay2", "Greene2"}, {16, 17} };
enter code here`printf("%s \n\n", contact[0].name.firstName); //output: Jay
现在,我想初始化(删除)联系人[0]的所有名称,但我想保留联系号码[0]。
这是我无法弄清楚的事情。我可以逐个初始化每个字符串,但我想一次性使用contact.name中的每个成员。
我可以像这样初始化。
printf("%s \n\n", contact[0].name.firstName); //output: Jay
//initialization of all the members in contact[0].name, one by one.
contact[0].name.firstName[0] ='\0';
contact[0].name.lastName[0] ='\0';
printf("%s", contact[0].name.firstName); //no output here.
但如果Name构造中有数百个成员,我就不能这样做。
例如,我试过这个。
contact[0].name = {0}; //first trial
contact[0].name = {{0}, {0}}; //second trial
两者都发生编译错误。 如果我想初始化所有嵌套结构,我可以使用memset。但是在这里我只需要初始化contact.name,而不是contact.numbers。请帮帮我。
答案 0 :(得分:4)
您将初始化与分配混合。
这是初始化:
struct Contact contact[2] =
{ {"Jay", "Greene"}, {14, 15},
{"Jay2", "Greene2"}, {16, 17} };
它是声明变量并赋予其初始值的组合。
这是作业:
contact[0].name = 0;
它为已经声明的变量赋值。
通过初始化结构,您可以指定结构的每个成员的值。通过赋值,您一次只能为一个成员分配值。
另请参阅David提供的链接,C11 Standard (draft n1570) - 6.7.9 Initialization具体为Note 19