如何使用指向该数组的指针访问二维数组的元素?
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)
答案 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 }}