typedef struct
{
int id;
char* first;
char* last;
}* person;
person* people;
你好。我如何使用上面所有设置的全局来填充不同“人”的人?关于 typedef 结构指针,我遇到了一些问题。我知道指针就像数组一样,但是我在将它们放在一起时遇到了问题...
我也想保留上面的代码。
编辑 1: char first 应该是 char* first。
丑陋如罪。你真的应该重新定义人不是指针。也不要使用匿名结构。
#include <stdio.h>
typedef struct {
int id;
char* first;
char* last;
}* person;
person* people = (person[]){
(person)&(struct {int id;char* first;char* last;}){0,"me","foo"},
(person)&(struct {int id;char* first;char* last;}){0,"you","foo"},
NULL
};
int main(void) {
while(*people) {
printf("%s %s\n", (*people)->first, (*people)->last);
people++;
}
return 0;
}
不要为 structs 使用 typedef。如果你使用带有标签的结构然后做你的事情会更清楚:
struct PERSON {
int id;
char *first;
char *last;
};
struct PERSON *people; /* people is a pointer to a struct PERSON. */
/* Allocate array of 42 struct PERSONS. */
people = malloc (42 * sizeof *people);
/* Now use people[0] to people[41]. */
您可以使用以下内容简单地创建类型结构数组person
:
people = malloc (num_person * sizeof(person));
for (i = 0; i < num_person; i++) {
people[i]->first = malloc (size * sizeof(char));
people[i]->last = malloc (size * sizeof(char));
}
people struct
在此之后,您可以用不同的参数填充每个。
隐藏真实类型的 typedef 是个坏主意。
如果你真的想要双重间接,我猜是这样的:
people = malloc(sizeof(person));
*people = malloc(SOME_NUMBER * sizeof(**people));
会分配你需要的东西。你会得到一个像这样的个人结构:
(*people)[INDEX]
使用特定人员结构时,您还需要为first
和last
字符串分配内存:
(*people)[INDEX].first = malloc(STRING_SIZE);
(*people)[INDEX].last = malloc(STRING_SIZE);
但是简单地删除疯狂的双重间接将真正清理事情并使一切更容易使用和理解:
people = malloc(SOME_NUMBER * sizeof(person));
people[INDEX].first = malloc(STRING_SIZE);
people[INDEX].last = malloc(STRING_SIZE);