C++ 对象取消引用的指针的指针?
我是计算机科学专业的学生。在给出答案之前,请仔细阅读我的问题强> 早上好!今天我有一个关于在传递给函数时取消引用对象类型指针的问题 我有一个书本指针数组和一个书本指针数组:C++ 对象取消引用的指针的指针?,c++,arrays,pointers,C++,Arrays,Pointers,我是计算机科学专业的学生。在给出答案之前,请仔细阅读我的问题 早上好!今天我有一个关于在传递给函数时取消引用对象类型指针的问题 我有一个书本指针数组和一个书本指针数组: Book* pBookArray[5]; Book** sortedPointerArray[5]; // Where sortedPointerArray[k] = &pBookArray[k] 我有一个带有原型和调用的函数: void sortBooksPointer(Book** sortArray[], int
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类中,我定义了一个friend to ostream,它允许使用cout
直接输出。我决定做一些测试,看看双重取消引用是否没有正确地使用以下代码行绑定book对象:
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
}
它100%正确工作
因此,问题是:
为什么双重取消引用会正确地将一本书分配给tempBookA,但不允许直接访问该书的公共功能?
提前感谢您的时间和知识。这是运算符优先级的问题。您可以执行
entitlea=(**sortArray[k]).getTitle()代码>这是运算符优先级的问题。您可以执行entitlea=(**sortArray[k]).getTitle()代码>我在代码中尝试了此操作,但收到以下错误:Book没有重载运算符->
并且左操作数具有类类型
。因此,我将其替换为entitlea=(**sortArray[k].getTitle();
,这会产生正确的响应。为什么会这样?这会不同于…(*sortArray[k]->getTitle();
?没错,第一个*有一个指向Book的指针(从指针指向指针)第二个得到了Book实例。但是您也可以执行(*sortArray[k])->getTitle();如果没有括号,->or.operator比*运算符具有更高的优先级,因此相当于执行*(sortArray[k]->getTitle())这将产生与您遇到的第一个错误类似的错误。我在代码中尝试了这一点,但收到了以下错误:Book没有重载运算符->
,并且左操作数的类类型为因此我将其替换为entitlea=(**sortArray[k].getTitle()这会产生正确的响应。为什么会这样?这会不同于…(*sortArray[k]->getTitle();
?你说得对,第一个*有一个指向Book的指针(从指针指向指针),第二个*有Book实例。但是你也可以这样做(*sortArray[k])->getTitle();如果没有括号,->or.运算符的优先级高于*运算符,因此相当于执行*(sortArray[k]->getTitle()),这将产生与您遇到的第一个类似的错误。
Book tempBookA == **sortArray[k];
tempTitleA = tempBookA.getTitle();