fork download
  1. #include <stdio.h>
  2. #include <stdlib.h> // 動的メモリ確保 (malloc/free) に必要
  3.  
  4. int main(void) {
  5. int i, j;
  6. // 変数a, bは行数、列数
  7. int a, b;
  8. // int **mat は int* の配列 (行のポインタ) を指すポインタ
  9. int **mat;
  10.  
  11. // a(行数)とb(列数)を読み込む
  12. scanf("%d %d", &a, &b);
  13.  
  14. // //ここで2次元配列の動的確保をする
  15.  
  16. // 1. a個の行ポインタ (int*) を格納する配列を確保
  17. mat = (int**)malloc(a * sizeof(int*));
  18.  
  19. // 2. 各行についてb個のint要素を格納する配列を確保
  20. for (i = 0; i < a; i++) {
  21. mat[i] = (int*)malloc(b * sizeof(int));
  22. }
  23.  
  24. // //ここで2次元配列に数値を代入する
  25.  
  26. // 1から始まる自然数
  27. int count = 1;
  28.  
  29. // 行 (i) と 列 (j) の順に代入
  30. for (i = 0; i < a; i++) {
  31. for (j = 0; j < b; j++) {
  32. mat[i][j] = count;
  33. count++;
  34. }
  35. }
  36.  
  37. // //以下の部分は表示の部分です (変更なし)
  38. for (i = 0; i < a; i++) {
  39. for (j = 0; j < b; j++) {
  40. printf("%d ", mat[i][j]);
  41. }
  42. printf("\n");
  43. }
  44.  
  45. // //さて、最後に忘れずにすることと言えば?
  46.  
  47. // 3. 確保したメモリを解放する (ヒープメモリの解放)
  48. // 各行の配列を解放
  49. for (i = 0; i < a; i++) {
  50. free(mat[i]);
  51. }
  52. // 行ポインタの配列を解放
  53. free(mat);
  54.  
  55. return 0;
  56. }
Success #stdin #stdout 0.01s 5324KB
stdin
2 3
stdout
1 2 3 
4 5 6