a[]
должен быть массивом struct, где каждый a[i]
означает struct.
В Структуре mem
должен быть указателем типа структуры (самонаводящийся). Итак, выражение.
s->a[i].mem = malloc(sizeof(*a[0]));
Выделяет память динамически с помощью таНос и присваивает адрес для mem
Что-то вроде:
struct xyx{
int data;
struct xyx *mem;
};
struct xyx a[10];
Итак: a[0]
типа struct xyx
.
и выражение:
a[i].mem = malloc(sizeof(*a[0]));
же, как:
a[i].mem = malloc(sizeof(struct xyz);
Второе: Теперь Что такое s->a[i]
?
s
еще раз указатель переменной какого-либо другого типа структуры, в котором имеется массив a[]
типа struct xyz
. Что-то вроде:
struct abc{
struct xyx a[10];
};
и s
должны быть:
struct abc x;
struct abc *s = &x;
или памяти на s
должны выделяться динамически.Итак, s -> a[i]
для доступа к члену.
Так выражение:
s -> a[i].mem = malloc(sizeof(*a[0]));
^ ^ ^
| | is pointer to struct of type that same as type of a[0]
| array of struct's elements,
s is pointer to a struct in which `a[]` is datamember
Вы пропускаете ')', чтобы закрыть вызов 'malloc'. – Kninnug
Вы назначаете член 'mem', так что там хранится указатель на выделенную память. –
s-> a [i] .mem = malloc (sizeof (* a [0]); Синтаксис отсутствует здесь –