У меня проблемы с пониманием теории между тем, что происходит с моими двумя функциями в C ++.К сожалению, я не смог скопировать весь код, потому что мне пришлось бы перевести все это с моего родного языка на английский.Дилемма, с которой я столкнулся, заключается в следующем: - и allStudents, и oldAnswers являются динамическими массивами - функция dataEntry прекрасно работает в том виде, в каком она есть, она изменяет allStudents, и изменение эффективно в основной функции, хотя аргументы были dataEntry (Student * allStudents ...), а не dataEntry (Student * & allStudents ...) - чтобы получить функцию addNewAnswer для эффективного изменения указателя oldAnswers в основной функции, я должен определить аргументы с помощью &, поэтому addNewAnswer (AllAnswers* & oldAnswers ...)
Почему один работает без &, а другой нет, хотя оба эффективно вносят изменения в указатели?Это потому, что функция addNewAnswer также вносит изменения в размер массивов (выделение памяти)?
int questionsCounter = 5;
enum Answers { CORRECT, INCORRECT };
struct Student {
int _stNumber;
char _name[30];
int _year;
Answers *_answers;
char * _userName;
char *_password;
};
struct AllAnswers {
int AnswerNumber;
char *Question;
Answers correctAnswer;
};
void dataEntry(Student * allStudents, int max) {
for (int i = 0; i<max; i++) {
cout << "\t::STUDENT " << i + 1 << "::";
cout << "Enter Student's name: ";
cin.getline(allStudents[i]._name, 30);
cout << "Enter Student's number: ";
cin >> allStudents[i]._stNumber;
cout << "Enter Student's year (1,2,3,4): ";
cin >> allStudents[i]._year;
allStudents[i]._userName = new char[11];
allStudents[i]._userName = GetUserName(allStudents[i]);
allStudents[i]._password = nullptr;
changePassword(allStudents[i]);
}
}
void addNewAnswer (AllAnswers *& oldAnswers, AllAnswers newAnswer) {
AllAnswers *temp = new AllAnswers[questionsCounter+1];
for (int i = 0; i < questionsCounter; i++)
{
copyAnswer(oldAnswers[i], temp[i]);
}
copyAnswer(newAnswer, temp[questionsCounter]);
deallocateAnswers(oldAnswers);
assert(oldAnswers != NULL);
oldAnswers = new AllAnswers[questionsCounter+1];
for (int i = 0; i < questionsCounter+1; i++)
{
copyAnswer(temp[i], oldAnswers[i]);
}
questionsCounter++;
}