 
 
 
 
 
   
ポインター配列の方法で、行列を確保する関数 new_matrix() を以
下に示す。
/*
 * test4.c
 */
#include <stdio.h>
#include <stdlib.h> /* malloc() */
#include <math.h>
typedef double *vector;
typedef vector *matrix;
/* m行n列の行列を作る */
matrix new_matrix(int m, int n)
{
    int i;
    matrix a;
    vector abody;
    if ((a = malloc(m * sizeof(vector))) == NULL)
        return NULL;
    if ((abody = malloc(m * n * sizeof(double))) == NULL)
        return NULL;
    for (i = 0; i < m; i++)
        a[i] = abody + n * i;
    return a;
}
void free_matrix(matrix a)
{
    free(a[0]);
    free(a);
}
int main()
{
    int m,n,i,j;
    matrix a;
    printf("m,n: "); scanf("%d %d", &m, &n);
    a = new_matrix(m,n);
    if (a == NULL) {
        fprintf(stderr, "new_matrix() に失敗\n");
        exit(1);
    }
    kuku(a,m,n);
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++)
            printf("a[%d][%d]=%g ", i, j, a[i][j]);
        printf("\n");
    }
    free_matrix(a);
    return 0;
}
kuku(matrix a, int m, int n)
{
    int i,j;
    for (i = 0; i < m; i++)
        for (j=0; j < n; j++)
            a[i][j] = (i + 1) * (j + 1);
}
 
 
 
 
