通过引用传递双指针

问题描述 投票:0回答:2

我收到一个错误消息,说我的表达式必须有一个指向类类型的指针,我试图为对象向量动态分配一个指针数组。

void dmaArr(Record*** sortedRec, vector<Record> records) {
    //sortedRec = nullptr;
    *sortedRec = new Record *[records.size()];
    cout << *sortedRec << endl << sortedRec << endl;
    for (int i = 0; i < records.size(); i++) {
        *sortedRec[i] = &records[i];
        cout << sortedRec[i]->name << '\t' << &sortedRec[i]->name << endl;
    }
c++ pointers vector dynamic-memory-allocation double-pointer
2个回答
2
投票

cout语句中,sortedRec[i]的类型为Record**,不能与指针取消引用运算符一起使用。您可以使用(*sortedRec[i])->name获取刚刚分配的记录的名称字段。

[偶然地,因为您按值传递了records,所以存储在for循环中的所有指针都指向该临时对象,并且一旦函数返回,它们将处于危险状态。您应该通过引用传递recordsvector<Record> &records以避免这种情况。


1
投票

sortedRecRecord***,因此sortedRec[i]Record**。您不能使用->运算符取消对指针到指针的引用。就像在*循环中一样,您需要使用Record*运算符将其取消引用到单个for指针中。然后,您可以使用->运算符取消引用Record*指针以访问Record实例的成员,例如:

© www.soinside.com 2019 - 2024. All rights reserved.