3

以下のプログラム構文を構造で理解しようとしています。

struct virus
{
    char signature[25] ;
    char status[20] ;
    int size ;
} v[2] = {
    "Yankee Doodle", "Deadly", 1813,
    "Dark Avenger", "Killer", 1795
    };

main( )
{
    int i ;
    for ( i = 0 ; i <=1 ; i++ )
        printf ( "\n%s %s", v[i].signature, v[i].status ) ;
} 

ここでとはどういうv[2]意味ですか? この種の宣言は今まで見たことがなかったので、少し混乱しました。v[2]誰かがここで何を意味するのか説明できますか?

4

4 に答える 4

4

v2 つの要素を持つ構造体の配列として作成virusし、右辺値で定義されている値を割り当てます。

に似ている

struct virus
{
    char signature[25] ;
    char status[20] ;
    int size ;
};

struct virus v[2] = {
    "Yankee Doodle", "Deadly", 1813,
    "Dark Avenger", "Killer", 1795
};
于 2013-06-15T18:27:25.983 に答える
0

struct virusこれは、配列の2 つの要素を持ち、初期化する配列を宣言します。

スコープの前にある宣言main( )は、配列がグローバル スコープと静的初期化を持つことを意味します。

于 2013-06-15T18:28:01.490 に答える
0

配列vは 2 つの配列ですstruct virusstruct virusの例では、配列の定義v[]とその初期化が 1 つで実行されます。定義と宣言は次のように分離できます。

struct virus
{
    char signature[25] ;
    char status[20] ;
    int size ;
} ;

struct virus v[2] = { "Yankee Doodle", "Deadly", 1813,
                      "Dark Avenger", "Killer", 1795 } ;

また、厳密に言えば、例 (および上記) の初期化子は不正な形式であり、実際にはそうあるべきであることに注意してください。

struct virus v[2] = { { "Yankee Doodle", "Deadly", 1813 },
                      { "Dark Avenger", "Killer", 1795  } } ;

警告レベルがかなり低く設定されていない限り、最初のインスタンスでコンパイラが警告を発行することを期待します。

于 2013-06-15T18:58:40.357 に答える
0
struct virus
{
    char signature[25];
    char status[20];
    int size;
} v[2] = /* ... */

識別子vを 2 の配列として定義しstruct virus、配列初期化子の内容で初期化します。

その値を印刷して、何が起こるかを確認できます。

#include <stdio.h>

int i;

for (i = 0; i < 2; i++)
    printf("%s %s %d\n", v[i].signature, v[i].status, v[i].size) ;
于 2013-06-15T18:27:33.873 に答える