Вот пример того, что у меня происходит. Этот первый фрагмент кода не будет работать.Почему это задание не работает вне функции?
typedef struct {
char *desc;
unsigned quantity;
} item;
item *inventory[INVENTORY_SIZE];
item thing = { "This is a thing.", 2 };
inventory[0] = &thing; // Fail.
int main(void){
// Code goes here.
}
Следующий код будет работать, однако.
typedef struct {
char *desc;
unsigned quantity;
} item;
item *inventory[INVENTORY_SIZE];
item thing = { "This is a thing.", 2 };
int main(void){
inventory[0] = &thing; // Works.
}
Я знаю, что не могу вызывать функции вне функции, но я могу назначить глобальные функции вне функции. Это похоже на задание. Итак, почему это не работает?
EDIT: Как только я нажал «сообщение», я думаю, что понял ответ. Вы можете назначать значения в объявлении вне функции, но только если это объявление. Это ответ, не так ли?
Я думаю, вы неправильно поняли разницу между * присваиванием * и * инициализацией *. Ваш первый. Это может быть только последний, если он должен быть там, где вы делаете то, что делаете. Вы можете делать то, что хотите, но только как инициализацию, которая потребует переупорядочения некоторого кода и предоставления вашему указателю массива инициализации. – WhozCraig
Повторите свое редактирование (и прочитайте вместе с моим ответом), вы не «присваиваете значения в объявлении вне функции», вы инициализируете объект как часть его объявления. Вы правы, что он * выглядит * как задание, за исключением довольно вопиющего факта, что он * не * :-) – paxdiablo