とりあえず関数を用意する.
C:
void func(int ** val)
{
int i, k;
int tmp[N*N];
for(i=0; i<N; i++){
for(k=0; k<N; k++){
}
}
for(i=0; i<N; i++){
for(k=0; k<N; k++){
printf(" %08d",
(int)(*
(val+i*N+k
)));
}
}
for(i=0; i<N; i++){
for(k=0; k<N; k++){
tmp[i*N+k] = (int)(*(val+i*N+k));
}
}
for(i=0; i<N; i++){
for(k=0; k<N; k++){
}
}
}
メインその1.動的確保する版.
C:
int main(int args, char **argv)
{
int i, k;
int **hoge;
hoge = (int**)malloc(sizeof(int*)*N);
for(i=0; i<N; i++){
hoge[i] = (int*)malloc(sizeof(int)*N);
}
for(i=0; i<N; i++){
for(k=0; k<N; k++){
printf(" %08x", &
(hoge
[i
][k
]));
}
}
for(i=0; i<N; i++){
for(k=0; k<N; k++){
hoge[i][k] = i*N + k;
}
}
for(i=0; i<N; i++){
for(k=0; k<N; k++){
printf(" %08d",
(hoge
[i
][k
]));
}
}
func(hoge);
return 0;
}
メインその2.動的確保しない版.
C:
int main(int args, char **argv)
{
int i, k;
int hoge[N][N];
for(i=0; i<N; i++){
for(k=0; k<N; k++){
printf(" %08x", &
(hoge
[i
][k
]));
}
}
for(i=0; i<N; i++){
for(k=0; k<N; k++){
hoge[i][k] = i*N + k;
}
}
for(i=0; i<N; i++){
for(k=0; k<N; k++){
printf(" %08d",
(hoge
[i
][k
]));
}
}
func(hoge);
return 0;
}
実行結果その1.二次元配列がうまく渡らないのでおかしい.
CODE:
>./test1
address
08070020 08070024 08070028 0807002c
08070038 0807003c 08070040 08070044
08070050 08070054 08070058 0807005c
08070068 0807006c 08070070 08070074
data
00000000 00000001 00000002 00000003
00000004 00000005 00000006 00000007
00000008 00000009 00000010 00000011
00000012 00000013 00000014 00000015
address
08070008 0807000c 08070010 08070014
08070018 0807001c 08070020 08070024
08070028 0807002c 08070030 08070034
08070038 0807003c 08070040 08070044
data
134676512 134676536 134676560 134676584
00000000 00000025 00000000 00000001
00000002 00000003 00000000 00000025
00000004 00000005 00000006 00000007
copied data
134676512 134676536 134676560 134676584
00000000 00000025 00000000 00000001
00000002 00000003 00000000 00000025
00000004 00000005 00000006 00000007
実行結果その2.ちゃんと見える.
CODE:
>./test2
address
bfedd178 bfedd17c bfedd180 bfedd184
bfedd188 bfedd18c bfedd190 bfedd194
bfedd198 bfedd19c bfedd1a0 bfedd1a4
bfedd1a8 bfedd1ac bfedd1b0 bfedd1b4
data
00000000 00000001 00000002 00000003
00000004 00000005 00000006 00000007
00000008 00000009 00000010 00000011
00000012 00000013 00000014 00000015
address
bfedd178 bfedd17c bfedd180 bfedd184
bfedd188 bfedd18c bfedd190 bfedd194
bfedd198 bfedd19c bfedd1a0 bfedd1a4
bfedd1a8 bfedd1ac bfedd1b0 bfedd1b4
data
00000000 00000001 00000002 00000003
00000004 00000005 00000006 00000007
00000008 00000009 00000010 00000011
00000012 00000013 00000014 00000015
copied data
00000000 00000001 00000002 00000003
00000004 00000005 00000006 00000007
00000008 00000009 00000010 00000011
00000012 00000013 00000014 00000015
もしかするとキャストがおかしいかもしれないけど,とりあえずこんなん.
その1の方ばっか記憶に残ってて,その2みたいに静的ならアドレスが繋がってたり二次元のまま渡して普通に見えるってのを忘れていた罠.
ちょっと音波で首吊ってくる.