next up previous
Next: B..6.2 C99 Up: B..6 余談として: C++, C99, Previous: B..6 余談として: C++, C99,

B..6.1 C++ の場合

C++ でポインター配列に相当することをするには、次のようにすればよい? C++ では、C の malloc()free() の代りに、 new 演算子と delete 演算子を用いることになるだろう。


/*
 * cpptest4.C --- ひとまずの完成
 */

#include <iostream.h>
#include <math.h>

typedef double scalar;
typedef scalar *vector;
typedef vector *matrix;

/* m行n列の行列を作る */
matrix new_matrix(int m, int n)
{
    vector abody;
    matrix a;

    a = new vector [m];
    if (a == NULL) return NULL;
    abody = new scalar [m * n];
    if (abody == NULL) {
        delete [] a;
        return NULL;
    }
    for (int i = 0; i < m; i++) {
        a[i] = abody;
	abody += n;
    }
    return a;
}

void free_matrix(matrix a)
{
    delete [] a[0];
    delete [] a;
}

int main()
{
    int m,n,i,j;
    matrix a;
    cout << "m,n: "; cin >> m >> n;
    a = new_matrix(m,n);
    if (a == NULL) {
        cerr << "new_matrix() に失敗\n";
        exit(1);
    }
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
            a[i][j] = (i+1)*(j+1);
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++)
            cout << "a[" << i << "][" << j << "]=" << a[i][j] << " ";
        cout << "\n";
    }
    return 0;
}


next up previous
Next: B..6.2 C99 Up: B..6 余談として: C++, C99, Previous: B..6 余談として: C++, C99,
Masashi Katsurada
平成18年4月29日