C 構造体の初期化
次の構文を使用して C で構造体を初期化できるかどうかが疑問視されています。
struct address { int street_no; char *street_name; char *city; char *prov; char *postal_code; }; address temp_address = { .city = "Hamilton", .prov = "Ontario" };
一部の情報源では、このスタイルは C でのみサポートされていると示唆されていますが、これは完全に正確ではありません。
技術的な制限
C は、指定された形式を使用した構造体の初期化をサポートしていますが、初期化子には技術的な制限があります。指定された初期化は、ポインターまたは参照であるメンバーに対してはサポートされません。提供されている例では、street_name、city、prov、および postal_code はすべてポインターであるため、指定された初期化構文を使用してこれらのメンバーを初期化することはできません。
ベスト プラクティスと読みやすさ
指定された初期化構文は明確な読みやすさを提供しますが、一般に、デフォルトのコンストラクターと明示的なメンバー初期化の組み合わせを使用して構造体を初期化することがベスト プラクティスと考えられています。これにより、どのメンバーを明示的に初期化し、どのメンバーを初期化しないままにするかを指定できます。
たとえば、次のように temp_addres 構造体を初期化できます。
address temp_addres = { 0, // street_no nullptr, // street_name "Hamilton", // city "Ontario", // prov nullptr, // postal_code };
このアプローチでは、次のようにして明確に読みやすくします。コメントを使用して各メンバーとその値を識別します。さらに、明示的に初期化されていないポインタは安全のために nullptr に設定されます。
以上がポインターメンバーに指定された初期化子を使用して C 構造体を初期化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。