4

2 つの実装の違いは次のとおりです。

struct queue {
    int a;
    int b;
    q_info *array;
};

struct queue {
    int a;
    int b;
    q_info array[0];
};
4

5 に答える 5

1

サイズがゼロの配列メンバーの場合、構造体を割り当てるときに、struct queue(たとえばmalloc(sizeof(struct queue) + sizeof(q_info) * 10)) のサイズよりも多くのメモリを割り当てて、使用できる連続したメモリ領域を確保できます。次に、配列は割り当てられたメモリの一部になり、割り当て例では 10 個のq_infoエントリが含まれます。

queueポインターについては、構造体用とarrayメンバー用の 2 つの割り当てを行う必要があります。もちろん、ポインターfree用に 1 回、構造用に 1 回、2 回呼び出す必要があります。array

ただし、一度割り当てられると、両方を同じように使用できます。

于 2013-10-10T10:48:36.793 に答える
0
q_info array[0];

自動変換により、ポインターに減衰します。ただし、譲渡不可です。あなたは言うことができません

array = <some address of an object>;

その後。

于 2013-10-10T10:53:47.480 に答える