2016-08-18 3 views
1

Я хочу создать массив структур, хотя нет. структур в массиве считывается из файла/ввода от пользователя.Доступ к элементу массива внутри структуры (который является частью массива структур) (в C)

объявляю-структуру:

struct student{ 
    char name[16]; 
    int *available; 
    int sum; 
}; 

typedef struct student ST; 

я выделить память для массива структур (после получения ввода размера):

ptr = (ST*)calloc(lines, sizeof(ST)); 

Я также выделить пространство для каждого массива в каждой структуры (с использованием петли):

ptr->available = (int*)calloc(lines, sizeof(int)); 

СЕЙЧАС - Я хочу поместить значения в эти массивы. Как я могу достичь каждого элемента?

Я пробовал:

*((ptr+i)->(available+j)) = 1; 

Но компилятор говорит мне: error: expected identifier before ‘(’ (я и J являются индексы, которые я использую, я для i-ой структуры, и J для -го элемента массива).

Что я делаю неправильно?

ответ

3

Рассмотрим с помощью индекса массива обозначения для удобства чтения:

ptr[i].available[j] = 1;

(Эквивалентный синтаксис с использованием явной арифметики указателей является значительно более затемненный *((ptr + i)->available + j) = 1;)

1

Забудьте *(ptr + idx) обозначения; он используется для путаницы новичков, а не в «реальном коде». Однако, если вы должны использовать его, а затем:

*((ptr+i)->available+j) = 1; 

Но использование:

ptr[i].available[j] = 1; 
Смежные вопросы