对象取消引用指针?

时间:2014-03-13 14:31:56

标签: c++ arrays pointers

我是计算机科学专业的学生。在回答之前请完整阅读我的问题!

早上好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,但不允许直接访问该书的公共功能?

提前感谢您的时间和知识。

1 个答案:

答案 0 :(得分:4)

这是运营商优先权的问题。你可以tempTitleA = (**sortArray[k]).getTitle();