C構造の初期化と割り当て

https://www.cnblogs.com/luoxiao23/p/11230412.html

1.初期化構造

構造は、カスタム設定の一般的なタイプであるデータパッキングの非常に一般的な方法です。指定された初期化中に、オブジェクト構造を多くの方法を初期化し、初期化シーケンス、コンストラクタで初期化します。次のような構造であれば。

struct A
{
    int b;
    int c; }

、:(1)を達成するために割り当てを添加することによってドットに達成する二つの方法、即ち、「.fieldname =値」、別のは大腸、すなわち 『値フィールド名』によって達成されるがあり(初期化子を指定)の初期化を指定フィールド名は、構造体のメンバに与えられた名前です。前者は、初期化C99規格が導入された構造であるが、C ++で、多くのコンパイラがサポートしていません。

//点号+赋值符号
struct A a={.b = 1,.c = 2}; //冒号 struct A a={b:1,c:2};

指定された初期設定を使用して、Linuxカーネル「.fieldname =値」の方法のように初期化すると、大きな利点がもたらすために、伝統的な初期化シーケンスを避けるために、そのような場を増やすなど、変数の初期化シーケンスのメンバーの数、およびスケーラビリティです重く修正。

注文が、書くことがより簡単であるため、初期化当店人気ですが、指定された初期に比べて初期化には(2)、初期化シーケンスは、貧困層の柔軟性を変更することはできません。

struct A a1={1,2};

C ++構造体はクラスに見ることができるので、(3)C ++コードに共通の初期化するコンストラクタを、構造体はまた、コンストラクタを持つことができるので、我々はコンストラクタ構造によってオブジェクト構造を初期化することができます。コンストラクタで所定の構造:

struct A 
{
    A(int a,int b) { this->a=a; this->b=b; }; int b; int c; }

次に、上記のように、次の形式をクラスオブジェクトを初期化することができるオブジェクト構造を初期化します。

struct A a(1,2);

注:構造体コンストラクタの定義であれば、初期化され、指定されたシーケンスで初期化することはできませんブレースを初期化するために使用することはできません。

2.構造の割り当て

変数の割り当てと初期化変数の定義は、変数定義の一部であるときに初期化が行われ、同じではない、割り当ては、変数の値が変数定義が完了した後に撮影した動作を変更することです。構造またはAを考えます:

struct A
{
    int b;
    int c; }

注:可変構造の割り当ては、以下の割り当てが禁止され、例えば、ブレース的割り当てを使用しません。

struct A  a;
//错误赋值 a={1,2};

以下の方法の一般的な構造変数割り当てリスト。

:(1)構造体変数を使用すると、ブランキング操作をmemsetを

//按照编译器默认的方式进行初始化(如果a是全局静态存储区的变量,默认初始化为0,如果是栈上的局部变量,默认初始化为随机值)
struct A a; memset(&a,0,sizeof(a));

(2)各構造部材変数割当に向けます。

struct A a; 
a.b=1; a.c=2;

(3)変数変数の別の構造に既存の構造を使用。すなわち、変数が相互に割り当てることができる構造との間です。

struct A a={1,2}; struct A aa; aa=a; //将已有的结构体变量付给aa

初期化と本質的に異なる割当て、初期化する際変数の定義最初の割り当てで、割り当ては、定義後の値の概念変更動作で異なるので、実現は同じではありません。

おすすめ

転載: www.cnblogs.com/focus-z/p/11742310.html