📜  我们如何在数组中存储嵌套结构值 - C 编程语言(1)

📅  最后修改于: 2023-12-03 14:54:23.557000             🧑  作者: Mango

我们如何在数组中存储嵌套结构值 - C 编程语言

在 C 编程语言中,数组是一种非常有用的数据结构。它可以存储一个固定大小的相同类型的元素集合。但是,如果我们需要存储嵌套结构值,该怎么办呢?

问题

考虑以下的嵌套结构:

struct Address {
  char street[100];
  char city[50];
  char state[20];
};

struct Person {
  char name[50];
  int age;
  struct Address address;
};

想象一下,我们要存储这样一个嵌套结构的数组,该怎么存储它?

一个简单的解决方案是用一个结构数组来存储,如下所示:

struct Person persons[10];

但是,这个数组中的每个元素都包含一个嵌套的地址结构。因此,我们需要为每个嵌套结构元素分配内存。

解决方案

我们可以使用指针来解决这个问题。我们可以用指向地址结构的指针代替实际的结构元素。

struct Person {
  char name[50];
  int age;
  struct Address *address;
};

这个结构中有一个指向地址结构的指针,我们可以创建一个指向地址结构的指针,然后将它指向具体的地址元素。

struct Address address1 = {"Main Street", "Chicago", "IL"};
struct Address address2 = {"1st Ave", "New York", "NY"};

struct Person persons[10];

for (int i = 0; i < 10; i++) {
  Person person;
  person.age = 20 + i;
  sprintf(person.name, "Person %d", i);
  if (i % 2 == 0) {
    person.address = &address1;
  } else {
    person.address = &address2;
  }
  persons[i] = person;
}

在这个例子中,我们创建了一个包含两个地址结构的例子,然后使用指向这两个地址结构的指针来初始化人员数组。

我们可以像下面一样访问具体的数组元素以及嵌套的结构元素:

printf("Person 0 name: %s, age: %d\n", persons[0].name, persons[0].age);
printf("Person 0 address: %s, %s, %s\n", persons[0].address->street, persons[0].address->city, persons[0].address->state);
总结

在 C 编程语言中,我们可以使用指针来存储嵌套结构值。通过使用指向地址结构的指针,我们可以轻松地在数组中存储嵌套结构值。