2次元のポインタ配列

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
テオリア

2次元のポインタ配列

#1

投稿記事 by テオリア » 18年前

再度よろしくお願いいたします。

int *pt[5][3]

上記の二次元ポインタ配列を関数に渡す(実引数)にはどうしたらよいのでしょうか?

box

Re:2次元のポインタ配列

#2

投稿記事 by box » 18年前

ちょっとした例です。
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;
}

YuO

Re:2次元のポインタ配列

#3

投稿記事 by YuO » 18年前

> 上記の二次元ポインタ配列を関数に渡す(実引数)にはどうしたらよいのでしょうか?

素直にそのまま書けばよいです。
つまり,
void func (int *arg[5][3]);
とでもしておけば,ptをそのまま渡せます。

テオリア

Re:2次元のポインタ配列

#4

投稿記事 by テオリア » 18年前

boxさん、YuOさん、回答ありがとうございます。

無事できました。

閉鎖

“C言語何でも質問掲示板” へ戻る