假设我有一个指向结构的指针数组。如何使数组的每个元素都指向不同的内存位置,以便我可以通过指针单独更改这些结构值?
一些示例代码:
struct Person {
int age;
char *name[64];
}
int main() {
struct Person *people[4];
struct Person tmp_person;
people[0] = &tmp_person;
people[0]->age = 12;
people[0]->name = "John";
people[1] = &tmp_person;
people[1]->age = 34;
people[1]->name = "Mike";
}
这里,每个 person 元素都将相同,因为所有数组元素都指向同一内存(tmp_person
)。我知道代码不正确,我只是想举个例子。那么我该如何创建唯一指针呢?为每个元素(tmp_person1
、tmp_person2
、...)创建一个新变量似乎很愚蠢,而且非常困难。
正如 dbush 所说:更典型的情况是,可能你(不知道你)想要的是一个对象数组,而不仅仅是指向对象的指针:
我将 的类型更正
name
为简单指针;它最适合静态字符串,如您的示例所示。您可以使用字符数组,但必须使用strcpy
或初始化它们memcpy
— 无法分配数组。我还向您展示了如何直接初始化数组,如果您在编程时知道数据,该方法就可以起作用,如您的示例所示。
您当然可以使用指向结构的指针数组,如最后一部分所示;通常,指向的对象将使用 malloc 动态分配(然后释放)。
我编写了一个小函数,只用于打印一个人以显示内容。
malloc
可用于根据需要分配内存。可以将
struct Person *people
多个结构分配给指针。此示例为三个结构分配内存。使用指针数组,可以为每个指针分配内存。