ホームページ > バックエンド開発 > C++ > C 構造体で長さ 0 の配列を使用する理由

C 構造体で長さ 0 の配列を使用する理由

Mary-Kate Olsen
リリース: 2024-12-11 10:05:15
オリジナル
582 人が閲覧しました

Why Use Zero-Length Arrays in C Structs?

長さ 0 の配列

古いコードをリファクタリングすると、構造体での長さ 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 の配列により、動的に割り当てられたバッファを参照するポインタとして扱うことができます。

このコードをリファクタリングするには、次の使用を検討してください。

  • Pointers : 長さ 0 の配列をバッファへの直接ポインタに置き換え、バッファを割り当てます
  • 長さ 1 の配列: 長さ 1 の配列を作成し、最初の要素をバッファーへのポインターとして使用します。

以上がC 構造体で長さ 0 の配列を使用する理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート