gpt4 book ai didi

c++ - 对象解引用指针的指针?

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:36 24 4
gpt4 key购买 nike

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

早上好 Stack Overflow!今天我有一个关于在传递给函数时取消引用类型对象指针的指针的问题。

我有一个书指针数组和一个书指针数组:

Book* pBookArray[5];
Book** sortedPointerArray[5]; // Where sortedPointerArray[k] = &pBookArray[k]

我有一个带有原型(prototype)和调用的函数:

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();在最终放弃并想出一个 hack 之前。而不是尝试访问 **sortArray[k] 的 getTitle() 函数我现在这样做:

Book tempBookA == **sortArray[k];
tempTitleA = tempBookA.getTitle();

100% 正确。

问题是:为什么双重取消引用正确地将一本书分配给 tempBookA,但不允许直接访问该书的公共(public)函数?

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

最佳答案

这是运算符优先级的问题。你可以做 tempTitleA = (**sortArray[k]).getTitle();

关于c++ - 对象解引用指针的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22381834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com