/* * C 言語演習問題(3) 配列とポインタ, 関数呼出しとポインタ * 問題3 解答例 * (C) 2005 Hirohisa AMAN */ #include #include int main(void){ int n, m, i, j; int** a; printf("配列の行数 (n) は ? "); scanf("%d", &n); printf("配列の列数 (m) は ? "); scanf("%d", &m); a = calloc(n, sizeof(int*)); /* a = malloc(sizeof(int*)*n); でも OK */ for ( i = 0; i < n; i++ ){ a[i] = calloc(m, sizeof(int)); /* a[i] = malloc(sizeof(int)*m); でも OK */ } /* 以下は配列がうまく確保できているかを確認 */ for ( i = 0; i < n; i++ ){ for ( j = 0; j < m; j++ ){ a[i][j] = i*j; } } for ( i = 0; i < n; i++ ){ for ( j = 0; j < m; j++ ){ printf("%d ", a[i][j]); } printf("\n"); } /* メモリの解放は確保と逆順で! */ for ( i = 0; i < n; i++ ){ free(a[i]); } free(a); return 0; }