私は、静的に割り当てられた多次元配列を一時変数に割り当てたいと考えています。次の例を考えてみましょう:多次元配列を一時変数に割り当てる方法は?
void foo(int b[3][2])
{
b[1][1] = 1; // no segmentation fault
}
int main()
{
int a[3][2] = {{1, 2}, {11, 12}, {21, 22}};
foo(a);
int** c;
c = (int**)&a;
c[1][1] = 1; // segmentation fault on execution
int* d[3];
d[0] = (int*)&(a[0]);
d[1] = (int*)&(a[1]);
d[2] = (int*)&(a[2]);
d[1][1] = 1; // no segmentation fault
return 0;
}
基本的に私は、コンパイラは、パラメータfoo()
のb
で何をやりたいです。しかし、唯一の解決策は、d
です。それほど複雑な方法はありませんか?
2次元配列がどういうわけかポインタへのポインタに直接キャストされていると思うのは奇妙です。 – tenfour