如何正确访问指向二维数组的指针的元素?

时间:2013-07-04 16:02:41

标签: c++ arrays

如何使用指向该数组的指针访问二维数组的元素?

std::recursive_mutex *(*A)[2];
std::recursive_mutex *B[2];
B[0] = new std::recursive_mutex[some_size];
B[1] = new std::recursive_mutex[some_size];
A = &B;

//accessing
//A[0][0]
//A[1]
//A[1][0]
//will not work (since the pointers do not point to the same locations as
//B[0][0]
//B[1]
//B[1][0]

奖金问题:有没有更好的方法来初始化A? (不使用std :: vector)

1 个答案:

答案 0 :(得分:1)

你的问题是你忘了取消引用A,因为它是指向B的指针。

#include <mutex>

int main(int argc, char* argv[])
{
    size_t some_size = 5;
    std::recursive_mutex *(*A)[2];
    std::recursive_mutex *B[2];
    B[0] = new std::recursive_mutex[some_size];
    B[1] = new std::recursive_mutex[some_size];
    A = &B;

    auto& x = A[0][0];      // resolved to be std::recursive_mutex*&
    auto& y = (*A)[0][0];   // resolved to be std::recursive_mutex&

    return 0;
}

正如您所看到的,当您执行A[0][0]时,我们得到一个指向互斥锁的指针,您想要的是互斥锁本身,您可以通过取消引用A来实现这一点,如下所示:{{1 }}