Доступ к массиву структур с использованием нотации указателя

#c

#c

Вопрос:

Я пытаюсь самостоятельно изучить C и пробовал это. У меня есть структура, один из элементов которой является массивом других структур. У меня есть вопрос об альтернативной нотации.

Структуры, которые я определил, являются

 struct employeeRecordT {
    string name;
    string title;
    string ssnum;
    double salary;
    int withholding;
};

struct payrollT {
    int num;
    employeeRecordT *array;
} payroll;
  

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

 payroll.array = new employeeRecordT[payroll.num];
  

где payroll.num указывает количество элементов в массиве. Я могу получить доступ к имени элемента employeeRecordT, используя обозначение массива, например

 payroll.array[i].title
  

Я хотел знать, как получить к этому доступ, используя обозначение указателя, я пытался

 payroll.(array i)->name = "Vikas";
  

и я получаю следующее сообщение об ошибке от g

toy.cc:30:13: ошибка: ожидаемый неквалифицированный идентификатор до ‘(‘ токен toy.cc:30:14: ошибка: ‘array’ не был объявлен в этой области

Я пытаюсь понять, что я должен использовать и почему? Не могли бы вы, ребята, помочь объяснить.

Заранее спасибо.

С уважением, Викас

Ответ №1:

 (payroll.array i)->name = "Vikas";
  

array является членом payroll , поэтому, когда вы выполняли payroll.(array i) , обозначение в скобках (т. Е. «сделай это первым») пыталось использовать переменную array , а не ту, которая находится в области payroll .

Конечно, при использовании C лучшим решением является Neils. По возможности используйте std::vector вместо вашего собственного динамически выделяемого хранилища.

Комментарии:

1. Попробовал то, что вы рекомендовали, и это работает. Я должен был подумать об этом. Оглядываясь назад, это кажется очевидным. Я согласен как с Нилом, так и с вами, что я должен использовать vector (и вообще использовать STL везде, где это возможно). Я делал это просто для обучения.

Ответ №2:

Если это причиняет боль, не делайте этого. Вместо этого используйте std::vector ваших структур.

Комментарии:

1. -1: Когда люди задают действительно некорректный вопрос, который показывает, что они перескочили к реализации, прежде чем задуматься о дизайне, все в порядке, и хорошо давать советы высокого уровня. Но, честно говоря, это был точный и специфичный вопрос с простым прямым ответом, не нужно вешать лапшу на уши парню за то, что он задал этот вопрос.