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

时间:2013-06-15 18:24:34

标签: 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++ )
        printf ( "\n%s %s", v[i].signature, v[i].status ) ;
} 

v[2]在这里意味着什么?我之前从未见过这样的声明。任何人都可以解释一下v[2]在这里的含义吗?

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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) ;

答案 2 :(得分:0)

这声明了一个struct virus数组,用于初始化数组的两个元素。

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

答案 3 :(得分:0)

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

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