2次元のポインタ配列
Posted: 2007年7月15日(日) 19:29
再度よろしくお願いいたします。
int *pt[5][3]
上記の二次元ポインタ配列を関数に渡す(実引数)にはどうしたらよいのでしょうか?
int *pt[5][3]
上記の二次元ポインタ配列を関数に渡す(実引数)にはどうしたらよいのでしょうか?
ちょっとした例です。
func()は、列の数が3である行列を受け取れます。
行の数は、引数で与えます。
#include <stdio.h>
#include <stdlib.h>
#define M1 (5)
#define M2 (10)
#define N (3)
void func(int *(*p)[N], int m)
{
int i, j;
for (i = 0; i < m; i++) {
for (j = 0; j < N; j++)
printf("%10d", *p[j]);
putchar('\n');
}
printf("\n\n");
}
int main(void)
{
int *pt1[M1][N], *pt2[M2][N], i, j;
for (j = 0; j < N; j++) {
for (i = 0; i < M1; i++) {
pt1[j] = (int *) malloc(sizeof(int));
if (!pt1[j])
fprintf(stderr, "out of memory\n"), exit(1);
*pt1[j] = i * 100 + j;
}
for (i = 0; i < M2; i++) {
pt2[j] = (int *) malloc(sizeof(int));
if (!pt2[j])
fprintf(stderr, "out of memory\n"), exit(1);
*pt2[j] = i * 10000 + j;
}
}
func(pt1, M1);
func(pt2, M2);
for (j = 0; j < N; j++) {
for (i = 0; i < M1; i++)
free(pt1[j]);
for (i = 0; i < M2; i++)
free(pt2[j]);
}
return 0;
}void func (int *arg[5][3]);とでもしておけば,ptをそのまま渡せます。