2013-06-15 1 views
3

Я пытаюсь понять ниже синтаксис программы со структурой.Что означает v [2] в терминах структуры в c?

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

Это просто объявление массива длиной-2. –

+0

Переменная с именем 'v' объявлена ​​как массив из 2 значений типа' struct virus' ... – DCoder

+0

Что означает «я никогда не видел ...»? Вы никогда не видели объявления массива, например 'int a [2]'? Или вы никогда не видели массив структур? – AnT

ответ

4

Он составляет v как массив из virus структура с 2 элементами и присваивает значения, определенные в rvalue.

его похожим на

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

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

Чтобы быть педантичным, это массив 'struct virus'. (Это имеет значение, потому что «вирус» теоретически может быть совершенно несвязанным типом, следовательно, 'typedef struct T {...} T;' idiom.) –

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) ; 
0

Объявляет массив struct virus, имеющий и инициализации два элемента массива.

Объявление, появившееся перед областью main(), означает, что массив будет иметь глобальную область видимости и статическую инициализацию.

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

Я ожидал бы, что компилятор выдаст предупреждение в первом случае, если уровень предупреждения не были слишком довольно низкой.

Смежные вопросы