簡體   English   中英

對象解除引用指針的指針?

[英]Pointer of Pointer of Object dereference?

我是計算機科學的學生。 請在回答之前完整閱讀我的問題!

早上好堆棧溢出! 今天,我有一個關於在傳遞給函數時取消引用類型為object的類型的指針的問題。

我有一個Book指針數組和一個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,卻不允許直接訪問該書的公共功能?

預先感謝您的時間和知識。

這是運算符優先級的問題。 你可以做tempTitleA = (**sortArray[k]).getTitle();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM