2 つの実装の違いは次のとおりです。
struct queue {
int a;
int b;
q_info *array;
};
と
struct queue {
int a;
int b;
q_info array[0];
};
2 つの実装の違いは次のとおりです。
struct queue {
int a;
int b;
q_info *array;
};
と
struct queue {
int a;
int b;
q_info array[0];
};
サイズがゼロの配列メンバーの場合、構造体を割り当てるときに、struct queue
(たとえばmalloc(sizeof(struct queue) + sizeof(q_info) * 10)
) のサイズよりも多くのメモリを割り当てて、使用できる連続したメモリ領域を確保できます。次に、配列は割り当てられたメモリの一部になり、割り当て例では 10 個のq_info
エントリが含まれます。
queue
ポインターについては、構造体用とarray
メンバー用の 2 つの割り当てを行う必要があります。もちろん、ポインターfree
用に 1 回、構造用に 1 回、2 回呼び出す必要があります。array
ただし、一度割り当てられると、両方を同じように使用できます。
q_info array[0];
自動変換により、ポインターに減衰します。ただし、譲渡不可です。あなたは言うことができません
array = <some address of an object>;
その後。