5 に答える
配列でもある構造があります
「配列でもある構造体」というものはありませんが、構造体の配列を作ることはできます。次のように、最初に変数typedef
の宣言を解く必要があります。struct
typedef struct {
char lastName[20];
char firstName[20];
int age;
} PERSON;
PERSON person[10];
これで、型の名前として使用PERSON
したり、型の変数を宣言PERSON
したり、それらへのポインターを作成したり、配列を渡したりすることができますint
。
void displayArray(PERSON pPerson[], int count) {
int i = 0;
printf("Last Name First Name Age\n");
while (i < count){
printf("%s %s %d\n",
pPerson[i].lastName,
pPerson[i].lastName,
pPerson[i].age);
i++;
}
}
void ポインターを渡して、PERSON[10] にキャストする必要があります。
ご覧のとおり、ポインターを PERSON スタクトに渡しているのではなく、構造体自体を含む配列にポインターを渡しています。それらは等しくありません。
正しく機能させるには、配列内の要素数を示す void ポインターと整数を渡します。それを受け取ると、割り当てられたメモリを超えて配列を読み取らないようにするのに役立ちます。
*人[]; これは本当に使いたいですか、それとも次のようなものが必要ですか: typedef PERSON *PPERSON;
大まかに書くと: ** なんでも = * なんでも [10]
したがって、おそらく*PPersonだけが必要です
配列はポインターとして関数に渡すことができるため、配列へのポインターとして渡そうとする代わりに (ちなみに、現在PPERSON
はポインターの配列として定義されていますが、これはあなたが持っているものではありません) 配列を次のように渡すだけです-でありPPERSON
、通常のポインター (つまりtypedef struct tagdata *PPERSON;
) を作成します。
次に、「ポインター」を関数内の通常の配列として使用できます。