ptr
- указатель на массив.
*ptr
разыменовывает указатель, поэтому результатом является массив.
(*ptr)[i]
- это элемент этого массива, которыйявляется Student
структурой.
(*ptr)[i].id
является членом этой структуры.
Ваш код неверен, потому что он пытается разыменовать ptr
с ->
(пока хорошо,ptr
является указателем, поэтому разыменование является допустимой операцией), но затем пытается сразу получить элемент id
, но он все еще просматривает весь массив.Сообщение компилятора примерно означает, что «вы сказали мне получить поле id
массива, что не имеет смысла, поскольку массивы имеют только индексы, а не именованные поля».
Если вы хотите использовать арифметику указателей, этопроще избавиться от этого typedef
и указателя на массив:
void SetArrays (Student *ptr)
{
fstream fin ("lab5_data.txt");
if (fin.is_open())
{
while (fin >> ptr->id)
{
ptr++; // advance to the next array element
}
}
}
В этой версии функция берет указатель на первый элемент (и использует ++
для перехода по массиву), а не указатель на весь массив.