typedef struct
{
int id;
char* first;
char* last;
}* person;
person* people;
嗨。 如何使用上述所有全局设置来填充不同“人”的人?我有关于typedef结构指针的问题。 我知道指针就像数组,但我有问题得到这一切...C - 如何操作typedef结构指针?
我想保留上述代码以及。
编辑1:char首先应该是char *首先。
typedef struct
{
int id;
char* first;
char* last;
}* person;
person* people;
嗨。 如何使用上述所有全局设置来填充不同“人”的人?我有关于typedef结构指针的问题。 我知道指针就像数组,但我有问题得到这一切...C - 如何操作typedef结构指针?
我想保留上述代码以及。
编辑1:char首先应该是char *首先。
你可以使用类似下面简单地创建一个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
使用不同的参数。
我不认为这个答案是正确的,因为OP的定义是“person”和“people”。 –
这是我的错误。它被认为是一个char *。现在测试上面的代码。 – AbhishekJoshi
@JonathanLeffler,是的,我只是假设这是一个错字。 –
如果你真的想要的双重间接引用,我想是这样的:
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);
我认为OP没有意识到隐含的双指针。 (也就是说typedef嵌入一个,然后分配创建另一个)。可能想多解释一下。 –
感谢您的回复。 @Carl,如果你能解释一点点,我将非常感谢它!基本上是双倍与单一。 – AbhishekJoshi
@AbhishekJoshi - 你的'typedef'中有一个'*',这意味着你创建的类型是一个指针类型。然后你声明了一个类型为'person *'的全局变量,但是因为'person'已经是一个指针类型了,你最终会得到一个全局变量,它是一个指向你的结构的指针。只要删除示例的第6行的'*'就可以清理干净。 –
其丑无比。你真的应该重新定义人不成为指针。也不要使用匿名结构。
#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;
}
隐藏真实类型的Typedefs是一个坏主意。
不要打扰结构类型定义。这是更清楚,如果你使用带有标签的结构,然后做你的事:
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]. */
如果你是“知道,指针与数组类似”,这将是最好清空你的头脑,扔掉你的书并重新开始更好的一个。 –
我个人不喜欢像'typedef'那样隐藏指针类型。就你而言,它似乎也是错误的。你可以改变这些定义吗? –
指针和数组虽然相关......并不是一回事。 – Andrew