我是计算机科学专业的学生。在回答之前请完整阅读我的问题!
早上好Stack Overflow!今天我有一个关于在传递给函数时解除引用类型为object的类型指针的指针的问题。
我有一个Book指针数组和一系列书指针指针:
Book* pBookArray[5];
Book** sortedPointerArray[5]; // Where sortedPointerArray[k] = &pBookArray[k]
我有一个原型和调用函数:
void sortBooksPointer(Book** sortArray[], int size, int mode)
sortBooksPointer(sortedPointerArray, 5, 0);
在这个函数中,我对书的标题或作者进行冒泡排序。排序算法正常工作,不是这个问题的主题。在第一次编写函数时,我尝试执行类似下面的操作并且没有成功:
string tempTitleA = **sortArray[k]->getTitle(); //Or Author depending on mode
在Book类中,我已经定义了一个ostream的朋友,允许使用cout
直接输出。我决定做一些测试,看看是否双重引用可能没有用以下代码行正确地阻止书籍对象:
if (verbose)
{
cout << "Address of sortedBooks[0]: " << sortArray[0] << endl; // Address of pointer to book pointer
cout << "Dereference of sortedBooks[0]: " << *sortArray[0] << endl; // Address of the book pointer pointed to by sortedBooks[0]
cout << "Double deference of sortedBooks[0]:\n" << **sortArray[0] << endl; // Book pointed to by the pointer which sortedBooks[0] points to
}
哪次成功完成。
我花了一整天的时间试图弄清楚为什么我可以使用重载operator<<
进行输出,但在最终放弃并提出黑客攻击之前无法分配tempTitleA = **sortArray[k]->getTitle();
。我没有尝试访问**sortArray[k]
的getTitle()函数,而是尝试这样做:
Book tempBookA == **sortArray[k];
tempTitleA = tempBookA.getTitle();
100%正确工作。
因此问题是: 为什么双重引用正确地将书籍分配给tempBookA,但不允许直接访问该书的公共功能?
提前感谢您的时间和知识。
答案 0 :(得分:4)
这是运营商优先权的问题。你可以tempTitleA = (**sortArray[k]).getTitle();