【发布时间】:2018-05-19 12:38:45
【问题描述】:
我无法理解我在 C++ 中的两个函数所发生的情况之间的理论。不幸的是,我无法复制整个代码,因为我必须将所有代码从我的母语翻译成英语。我在这里的困境如下: - allStudents 和 oldAnswers 都是动态数组 - 函数 dataEntry 的工作方式非常好,它更改了 allStudents,并且更改在主函数中有效,尽管参数是 dataEntry (Student * allStudents...) 而不是 dataEntry (Student *& allStudents.. .) - 为了让函数addNewAnswer有效地改变main函数中的指针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++;
}
【问题讨论】:
-
AllAnswers *& oldAnswers- 对指针的引用,当您更改指针指向稍后的位置时需要oldAnswers = new AllAnswers[questionsCounter+1];如果您只传递指针的副本,则无法执行此操作