假设有一个结构“Contact”,其中有两个不同的结构。
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。请帮助我。
最佳答案
您将初始化与赋值混在一起。
这是初始化:
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
关于c - 仅初始化 C 中的一个嵌套结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47950758/