我试图通过结构理解下面的程序语法。
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]
在这里的含义吗?
答案 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 } } ;
我希望编译器在第一个实例中发出警告,除非警告级别设置得太低。