2014-12-15 2 views

ответ

5

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

struct temp t = { 5 }; 

Т.е. вы получаете только один шанс. Если вы пропустили свой шанс , инициализируйте постоянный объект, вам не повезло - объект останется неинициализированным навсегда.

По этой причине, как правило, не рекомендуется создавать постоянные поля внутри обычно непостоянных объектов структуры, если вы действительно не знаете, что делаете.

Это теория этого.

На практике вы можете иногда видеть, как люди прибегают к различным «хакам» и просто игнорируют консистенцию поля. Например, вся структура может быть «назначена» с помощью memcpy. В некоторых ситуациях на языке C у вас нет выбора сделать что-то подобное (например, с объектами malloc, поскольку язык C не предоставляет средств для инициализации в таких контекстах).

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

3

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

int main() 
{ 
    struct temp tester = { .i = 5 }; 
} 
+0

Хорошо работает. Но вы забыли создать объект там .... –

+0

@HarishR - возгласы, приветствия – slugonamission

+0

Это лучший пример, чем AndreyT, потому что он специфичен для того, с каким членом он инициализируется. Его будет делать только первый элемент и установить остальное на 0 - надеюсь, что мы не добавим участников в верхнюю часть позже. – technosaurus

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