c - 仅初始化 C 中的一个嵌套结构

标签 c arrays pointers struct

假设有一个结构“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/

相关文章:

c++ - C++-如果找不到帐号,则显示错误消息

python - 将 2d numpy 数组拆分为两个 1d 数组的最简单方法?

c++ - for_each 调用不适用于指针 vector

c - C 中的指针赋值、malloc() 和 free()

c++ - 从文件中读取十六进制值

c - 使用 C/Intel 程序集寻求最大位图(又名位数组)性能

python - SWIG 将 C 库连接到 Python(从 C 'iterable' 结构创建 'sequence' Python 数据类型)

c++ - 将数值绑定(bind)到准备好的 SQL 的正确方法

javascript - 返回新形式的数组 - javascript

c - 遍历指针到指针