1

私は構造体を持っています:

struct Thing {
    int id;
}

Thing次に、 s の配列を作成します。

struct Thing *a;
a = (struct Thing *) malloc(sizeof(struct Thing));
a->id = 1;

struct Thing *b;
b = (struct Thing *) malloc(sizeof(struct Thing));
b->id = 2;

struct Thing *array[] = {a,b};

配列のサイズを確認すると、2 です。次の方法で配列のサイズを確認します。

printf("%d",sizeof(array)/sizeof(array[0]));

また、Things の配列を受け取る関数もあります。

void function(struct Thing *array[]) {
    //do stuff
}

次に、関数に配列を渡します。

function(array);

関数内では、配列のサイズは 1 です。誰かがどこで間違っていたのか、関数内で配列のサイズが 1 になっている理由を教えてもらえますか?

4

2 に答える 2

2

任意の種類の配列を関数に渡すと、この配列の最初の要素へのポインターに減衰します。

void function(struct Thing *array[]) {
    //do stuff
}

単なるシンタックスシュガーです

void function(struct Thing** array) {
    //do stuff
}
于 2013-02-25T07:40:35.170 に答える
1

配列定義

struct Thing *array[] = {a,b};

する必要があります

struct Thing array[] = {a,b};

次に、それを関数に渡します。関数を宣言する必要があります

void function(struct Thing *array, int count) {
//do stuff
}

したがって、配列の境界を渡すことができます。

于 2013-02-25T07:44:15.540 に答える