fork download
  1. #include <stdio.h>
  2. #include <stdlib.h> // malloc, freeを使うために必要 [cite: 12]
  3.  
  4. int main(){
  5. int i, j, k;
  6. int a, b;
  7. int **mat; // 「int型のポインタ」のポインタ [cite: 18]
  8. scanf("%d %d", &a, &b);
  9.  
  10. // --- 【1】ここで2次元配列の動的確保をする ---
  11. // 手順①:まず「各行の先頭アドレス」を格納するためのポインタ配列を確保する [cite: 17, 18]
  12. mat = (int **)malloc(sizeof(int *) * a);
  13.  
  14. for(i = 0; i < a; i++){
  15. // 手順②:各行に対して、実際の数値(int)を入れるための領域を確保する [cite: 17, 18]
  16. mat[i] = (int *)malloc(sizeof(int) * b);
  17. }
  18.  
  19. // --- 【2】ここで2次元配列に数値を代入する ---
  20. // スライドの課題1では「1, 2, 3...と順に自然数を代入」する指示があります [cite: 19]
  21. int count = 1;
  22. for(i = 0; i < a; i++){
  23. for(j = 0; j < b; j++){
  24. mat[i][j] = count++;
  25. }
  26. }
  27.  
  28. // 表示の部分
  29. for(i = 0; i < a; i++){
  30. for(j = 0; j < b; j++){
  31. printf("%d ", mat[i][j]);
  32. }
  33. printf("\n");
  34. }
  35.  
  36. // --- 【3】最後に忘れずにすること(メモリ解放) ---
  37. // 使い終わったら free( ) をして後始末をします
  38. // 確保した時と「逆の手順」で解放するのがルールです
  39. for(i = 0; i < a; i++){
  40. free(mat[i]); // まず各行の中身を解放
  41. }
  42. free(mat); // 最後に外枠のポインタ配列を解放
  43.  
  44. return 0;
  45. }
Success #stdin #stdout 0s 5312KB
stdin
2 3
stdout
1 2 3 
4 5 6