我无法理解C ++中我的两个函数发生的事情之间的理论。不幸的是,我无法复制整个代码,因为我必须将所有代码从我的母语翻译成英语。我在这里面临的困境如下: - allStudents和oldAnswers都是动态数组 - 函数dataEntry的工作方式非常好,它会更改allStudents,并且更改在main函数中有效,尽管参数是dataEntry(Student * allStudents ...)而不是dataEntry(Student *& allStudents。 ..) - 为了使函数addNewAnswer在main函数中有效地改变指针oldAnswers,我必须用&来定义参数,所以addNewAnswer(AllAnswers *& oldAnswers ...)
为什么没有&而另一个没有,虽然两者都有效地改变了指针?是因为addNewAnswer函数还对数组大小(内存分配)进行了更改吗?
MediaStore.Audio.Albums
答案 0 :(得分:0)
oldAnswers =
编辑指针本身,就像你说的那样。
operator[]
实际上是一个接受指针并返回引用的函数。当你有allStudents[i] =
时,你实际上并没有编辑指针本身。相反,您正在i
Students
旅行超过allStudents
指针并编辑其中的任何内容。
因此allStudents
是另一个指针的副本(通过引用传递)或别名(按值传递)并不重要,因为在任何一种情况下,所有students[i]
都返回相同的内容引用相同的Student
。
如果不做课程,请使用std::vector
代替new[]
。对于值/引用语义而言,它比指向堆的指针更直观,这非常方便。