2
4

5 に答える 5

7

配列でもある構造があります

「配列でもある構造体」というものはありませんが、構造体の配列を作ることはできます。次のように、最初に変数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++;
    }
}
于 2012-10-09T14:07:51.370 に答える
0

void ポインターを渡して、PERSON[10] にキャストする必要があります。

ご覧のとおり、ポインターを PERSON スタクトに渡しているのではなく、構造体自体を含む配列にポインターを渡しています。それらは等しくありません。

正しく機能させるには、配列内の要素数を示す void ポインターと整数を渡します。それを受け取ると、割り当てられたメモリを超えて配列を読み取らないようにするのに役立ちます。

于 2012-10-09T14:04:14.600 に答える
0

*人[]; これは本当に使いたいですか、それとも次のようなものが必要ですか: typedef PERSON *PPERSON;

于 2012-10-09T14:32:35.560 に答える
0

大まかに書くと: ** なんでも = * なんでも [10]

したがって、おそらく*PPersonだけが必要です

于 2012-10-09T14:05:24.200 に答える
0

配列はポインターとして関数に渡すことができるため、配列へのポインターとして渡そうとする代わりに (ちなみに、現在PPERSONはポインターの配列として定義されていますが、これはあなたが持っているものではありません) 配列を次のように渡すだけです-でありPPERSON、通常のポインター (つまりtypedef struct tagdata *PPERSON;) を作成します。

次に、「ポインター」を関数内の通常の配列として使用できます。

于 2012-10-09T14:06:17.287 に答える