0

その配列へのポインターを使用して、2 次元配列の要素にアクセスするにはどうすればよいですか?

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 を使用しない場合)

4

1 に答える 1

1

問題は、A が B へのポインタであるため、A を逆参照するのを忘れていることです。

#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 を逆参照することでそれを取得します(*A)[0][0]

于 2013-07-04T16:20:26.480 に答える