Это было ДОЛГОЕ время (25 лет) с тех пор, как я сделал C, и поэтому я забываю некоторые вещи, поэтому, пожалуйста, прости вопрос.
Учитывая, что у меня есть следующие объявления:
typedef struct item {
int field;
} Item;
typedef struct data {
Item b;
} Data;
Я пытался обновить структуру, когда она передается функции, и это не работает вообще.
static void foo(Data *data) {
data->b.field = 3; // doesn't work, the struct remains unchanged.
}
static void test() {
Data v = {.b = {.field = 2}};
foo(&v);
}
Однако, если я немного изменил объявление, используйте malloc для его выделения.
typedef struct data {
Item *b;
};
static void foo(struct data *data) {
data->b->field = 3; // works.
}
static void test() {
Data v = (struct data*) malloc(sizeof(Data));
Item i = (struct item*) malloc(sizeof(Item));
foo(v);
free(i);
free(v);
}
Может кто-нибудь сообщить мне, почему это так?Разве невозможно иметь члены структуры, которые можно обновлять как члены?Как я мог заставить работать первый пример?
Заранее спасибо.