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