2012-04-24 2 views
2

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

typedef struct { 
    int height; 
    int age; 
} Person; 

int main (void) 
{ 
    Person bill = {100,35}; 
    bill = {120,34}; // error: expected expression before ‘{’ token 
    bill = Person {120,34}; // error: expected expression before ‘Person’ 

    return 0; 
} 

ответ

8

не напрямую, а C99 имеет составные литералы для этого

bill = (Person){120,34}; 

вы могли бы даже сделать вещи более удобным для чтения, используя назначенные инициализаторами как

bill = (Person){ .height = 120, .age = 34, }; 
+0

Спасибо большое! Работает отлично с моим GCC (OSX GCC версии 4.2.1). Я мало знаю о вариантах C и последствиях использования новых функций. Могу ли я спросить, считается ли это стандартом? – MachineElf

+0

@MachineElf Есть 4 аромата языка C: K & R C, C90, C99 и C11. K & R C является предварительной стандартизацией, а две цифры остальных составляют год выпуска. Комбинированные литералы и назначенные инициализаторы были введены на C99. Текущей версией стандарта является C11, и он также поддерживает эти функции. Поэтому это следует считать стандартным - если ваш компилятор не может обработать этот код, он не соответствует стандарту C. – Lundin

+0

Ах, фантастика, спасибо! – MachineElf

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