スポンサーリンク
[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
スポンサーリンク