ARRは、以下のように関数を転置し、[0]、それは元の$ 00 ... 001を与えることなくされるの内容を検査するために渡されます。住所はarrとなっています。どうしてそれが間違っていますか?私は[0]が配列の1のアドレスであり、[0] [1]が配列の最初の要素であると考えます。説明してください。C++ 2次元配列とポインタ参照
問題:例外をスロー
int arr[][4] = { { 1, 2, 3, 4},{ 5, 6,7,8 },{ 9,10,11,12 } };
transpose((int **)arr, 3, 4);
int** transpose(int** a, int m, int n)
{
int** output = new int*[n];
for (int i = 0;i < m;i++)
{
output[i] = new int[n];
}
for (int i = 0;i < m;i++)
{
for (int j = 0;j < n;j++)
{
//*((output[j]) + i) = *(a[i] + j);
//*((output[j]) + i) = a[i][j];
output[j][i] = a[i][j];
}
}
return output;
}
。
が正常に動作します:すべての
int** output=transpose((int *)arr, 3, 4);
print(output,3,4);
int**transpose(int * a, int m, int n)
{
int** t = new int*[n];
for (int i = 0;i < n;i++)
{
t[i] = new int[m];
}
for (int i = 0;i < m;i++)
{
for (int j = 0;j < n;j++)
{
t[j][i] = *((a + i*n) + j);
}
}
return t;
}
void Matrix::print(int ** a, int m, int n)
{
for (int i = 0;i < m;i++)
{
for (int j = 0;j < n;j++)
{
std::cout << a[i][j] << ",";
}
std::cout << "\n";
}
}
「投げ出し例外」が何を意味するのか分かりません。 –
最初のメソッドで[i] [j]にアクセス中にアクセス違反例外がスローされています。それはメモリを読み取ることができないことを伝えています。 – Curious
'(int **)arr'は間違いです。あなたは配列とポインタの違いを理解していないようです。転置関数は2次元配列では使用できません。 –