📅  最后修改于: 2023-12-03 14:54:23.557000             🧑  作者: Mango
在 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 编程语言中,我们可以使用指针来存储嵌套结构值。通过使用指向地址结构的指针,我们可以轻松地在数组中存储嵌套结构值。