古いコードをリファクタリングすると、構造体での長さ 0 の配列の使用など、疑わしい慣行が見つかる可能性があります。これにより、次のような疑問が生じます: なぜ要素のない配列を作成するのでしょうか?
次の構造体を考えてみましょう:
struct someData { int nData; BYTE byData[0]; }
byData で見られるように、長さ 0 の配列は珍しい選択です。通常、配列には要素が格納されます。ただし、長さ 0 の配列はポインターとして使用できます。この場合、byData は、後で動的に割り当てられる可変長バッファーのプレースホルダーとして機能します。
struct someData* mallocSomeData(int size) { struct someData* result = (struct someData*)malloc(sizeof(struct someData) + size * sizeof(BYTE)); if (result) { result->nData = size; } return result; }
この関数は、someData 構造体と指定された長さのバッファーにメモリを割り当てます。構造体の長さ 0 の配列により、動的に割り当てられたバッファを参照するポインタとして扱うことができます。
このコードをリファクタリングするには、次の使用を検討してください。
以上がC 構造体で長さ 0 の配列を使用する理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。