スポンサーリンク

[c言語]ダブルポインタとmalloc()で2次元配列を作成

ダブルポインタとmalloc()で2次元配列を作成してみようと思います。
ダブルポインタと配列の関係を実感するのみ、良い取り組みだと思っています。

参考:[c言語]トリプルポインタを関数の引数に渡して、2次元配列のメモリ確保をする

まずは、int型のダブルポインタを宣言します。

	int** arr = NULL;

そして、ダブルポインタarrの指し示す先の、ポインタ配列の実体をmalloc()で確保します。

	arr = (int**)malloc(sizeof(int*) * ROW);

更に、ポインタ配列の指し示す先の、int型の配列の実体をmalloc()で確保します。

	for(i = 0; i < ROW; i++){
		arr[i] = (int*)malloc(sizeof(int) * COL);
		if(arr[i] == NULL){
			return -1;
		}
	}	

更に、それぞれの配列の中身に値を詰めていきます。
最終的には、2次元配列として、配列の要素にアクセスします。
	for(i = 0; i < ROW; i++){
		for(j = 0; j < COL; j++){
			arr[i][j] = i * j;
		}
	}

スポンサーリンク

サンプルコード

下記がサンプルコードになります。

$ cat sample.c 
#include <stdio.h>
#include <stdlib.h>

#define ROW 6
#define COL 5
int main(){
	int** arr = NULL;
	int i, j;
	
	arr = (int**)malloc(sizeof(int*) * ROW);
	if(arr == NULL){
		return -1;
	}
	for(i = 0; i < ROW; i++){
		arr[i] = (int*)malloc(sizeof(int) * COL);
		if(arr[i] == NULL){
			return -1;
		}
	}	
	for(i = 0; i < ROW; i++){
		for(j = 0; j < COL; j++){
			arr[i][j] = i * j;
		}
	}

	for(i = 0; i < ROW; i++){
		for(j = 0; j < COL; j++){
			printf("%d ", arr[i][j]) ;
		}
		printf("\n");
	}	
			
	return 0;
}

下記が実行結果になります。
最後は、2次元配列の要素をprintf出力しています。
$ gcc -o sample sample.c
$ ./sample 
0 0 0 0 0 
0 1 2 3 4 
0 2 4 6 8 
0 3 6 9 12 
0 4 8 12 16 
0 5 10 15 20 

スポンサーリンク