2013-07-23 2 views
2

Я видел выделяющий память для структуры, как этотСтруктура его член

///enter code here 
    for(i = 0; i<10; i++) 
    s->a[i].mem = malloc(sizeof(*a[0])); 

Что это значит ??? это выделение памяти для или мем. Я запутался.

если оно выделяется указателю mem ?? Я видел в коде, они обратились к

ли это законно ???

+2

Вы пропускаете ')', чтобы закрыть вызов 'malloc'. – Kninnug

+0

Вы назначаете член 'mem', так что там хранится указатель на выделенную память. –

+0

s-> a [i] .mem = malloc (sizeof (* a [0]); Синтаксис отсутствует здесь –

ответ

0

Код выделяет блок, который имеет тот же размер, что и объект, на который указывает a[0]. Затем он сохраняет указатель на этот блок в s->a[i].mem.

1

Это выделит память размером *a[0], а указатель на начало этого блока памяти будет сохранен в указателе mem.

0

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

Такое распределение памяти указывает s-> а [я] .mem

Итак, Я предполагаю, что в другом месте программы a [0] настроен, а затем этот фрагмент использует содержимое [0], чтобы найти размер для других членов []

4

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 
Смежные вопросы