v[2]在c中的结构方面意味着什么?

v[2]在c中的结构方面意味着什么?,c,struct,C,Struct,我试图理解下面的程序语法和结构 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++ ) p

我试图理解下面的程序语法和结构

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 ) ;
} 
结构病毒 { 字符签名[25]; 字符状态[20]; 整数大小; }v[2]={ “洋基涂鸦”,“致命的”,1813年, 《黑暗复仇者》、《杀手》,1795年 }; 主要() { int i;
对于(i=0;i它将
v
作为
virus
结构的数组,包含2个元素,并按照右值中的定义赋值

类似于

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

struct virus v[2] = {
    "Yankee Doodle", "Deadly", 1813,
    "Dark Avenger", "Killer", 1795
};
它将标识符
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) ;
#包括
int i;
对于(i=0;i<2;i++)
printf(“%s%s%d\n”,v[i]。签名,v[i]。状态,v[i]。大小);

这声明了一个包含并初始化两个数组元素的
struct virus
数组


main()
作用域之前的声明意味着数组将具有全局作用域和静态初始化。

数组
v
是一个由两个
struct virus
组成的数组。在本例中
struct virus
的定义中,数组
v[]
及其初始化在一个系统中执行。定义和声明可以分开,因此:

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  } } ;

我希望编译器在第一个实例中发出警告,除非警告级别设置得太低。

它只是声明了一个长度为2的数组。名为
v
的变量被声明为一个由2个值组成的数组,类型为
struct virus
…什么是“我从未见过…”确切地说是指?你从来没有见过数组声明,比如
inta[2]
?或者你从来没有见过结构数组?迂腐地说,它是一个
struct virus
数组(这有区别,因为
virus
在理论上可能是一个完全不相关的类型,因此
typedef struct{…})T;
惯用语。)
struct virus v[2] = { { "Yankee Doodle", "Deadly", 1813 },
                      { "Dark Avenger", "Killer", 1795  } } ;