2012-05-19 3 views
2

Вот часть моего кода. Я хотел бы инициализировать только arraylist[0] как arraylist[0].x = 0 и arraylist[0].y = 0. Мне не нужно инициализировать остальную часть массива struct. Как мне это сделать? Спасибо.Инициализация структуры массива в C

#include <stdio.h> 
struct example { 
    int x; 
    int y; 
}; 
struct example arraylist[40]; 

int main(int argc, char *argv[]){ 
    printf("%d\n %d\n", arraylist[0].x, arraylist[0].y); 
    return 0; 
} 
+0

AFAIK это невозможно в действующих стандартах C. Думаю, у C++ есть способ сделать это. –

+0

У вас нет необходимости инициализировать остальные элементы, но для их инициализации вам не очень больно. –

ответ

5

Вы можете инициализировать любой конкретный элемент массива struct.

Например:

struct example arraylist[40] = { [0]={0,0}}; //sets 0th element of struct 

struct example arraylist[40] = { [5]={0,0}}; //sets 6th element of struct 

Это называется Designated Initializers, которое раньше было расширение ГНУ, прежде чем С99 адаптировать его и также поддерживается в стандартном C, так как C99.

+4

Однако, как только у вас есть инициализатор для любой части объекта, весь объект инициализируется (до «нуля соответствующего типа»). – caf

+1

Это не расширение gnu, а часть C99 (и C11). Gcc имеет это расширение, чтобы переносить его также в режиме C89. –

+0

Согласен. Это полезно для установки любого значения, а не только «ноль для типа», а также доступа к значениям, которые не инициализированы, в любом случае не будут исправляться. –

1

В C, после инициализации части структуры/массива, инициализировать остальное с 0.

Вы не должны иметь никаких проблем с этим, как вы не должны получить доступ к неинициализированным переменным в первом место, а их значение не определено.

+0

AFAIR, это даже верно для C++. –

1

В C все статические и внешние переменные инициализируются до 0, если явно не инициализировано иначе.

+0

... если не инициализировано иначе :) –

+0

Отредактировано так, что вы можете явно инициализировать его иначе. Спасибо. – kmkaplan

2

Поскольку вы говорите о переменной в области файлов, здесь вам не нужно ничего делать, поскольку такие переменные всегда инициализируются 0, если вы не предоставляете явный инициализатор.

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