typedef struct
{
int id;
char* first;
char* last;
}* person;
person* people;
您好。 我怎样才能在全球范围内使用上述所有内容来填充不同“人”的人?关于typedef结构指针,我遇到了问题。 我知道指针就像数组一样,但是我在解决这个问题时遇到了问题......
我想保留上面的代码。
编辑1:char首先应该是char *。
答案 0 :(得分:2)
丑恶如罪。你真的应该重新定义人不是指针。也不要使用匿名结构。
#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;
}
答案 1 :(得分:2)
不要为结构的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]. */
答案 2 :(得分:1)
您可以使用以下内容创建类型为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
。
答案 3 :(得分:1)
隐藏真实类型的Typedef是个坏主意。
答案 4 :(得分:0)
如果你真的想要双重间接,我想是这样的:
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);