[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
