3

私は構造の配列を持っています.そして、私がしたいことは、それらの構造のメンバーに値を割り当てることです.次のコードの問題は何ですか...

#include <stdio.h>


typedef struct{
int a1;
int a2;

}sample;


main(){

sample ar[4]={ 
    (1,2),
    (3,4),
    (5,6),
    (7,8) 
};

int i;
for(i=0;i<4;i++){
    printf("ar[%d]----%d  %d",i,ar[i].a1,ar[i].a2);
     }
}

現在、正常にコンパイルされていますが、出力は

ar[0]----2  4 
ar[1]----6  8 
ar[2]----0  0 
ar[3]----0  0 

代わりに(または、プログラムが正しく機能していて、愚かな誤解に苦しんでいる可能性があります)

ar[0]----1  2
ar[1]----3  4 
ar[2]----5  6 
ar[3]----7  8
4

3 に答える 3

2

あなたが書いた:

sample ar[4];
ar[4] = { 
    (1,2),
    (3,4),
    (5,6),
    (7,8) 
};

配列初期化子の構文( の初期化中にのみ有効ar) は次のとおりです。

sample ar[4] = { 
    {1,2},
    {3,4},
    {5,6},
    {7,8} 
};

C11 (n1570)、§ 6.7.9 初期化

initializer:   
    assignment-expression 
    { initializer-list } 
    { initializer-list , }

また、読みやすいコードを書くにはインデントが重要です。

于 2013-03-30T11:11:30.540 に答える
2

ベクトルを次のように初期化する必要があります。

sample ar[4] = {
    {1,2},
    {3,4},
    {5,6},
    {7,8}
};

また、次の戻り値の型を指定する必要がありますmain()

       int main()
    // ^^^
    // ...
于 2013-03-30T11:13:48.947 に答える
0

宣言で割り当てを行い、常に「{」を使用する必要があります。

sample ar[4] = { 
    {1,2},
    {3,4},
    {5,6},
    {7,8} 
};
于 2013-03-30T11:15:22.350 に答える