ちなみに、C++ の場合は、 関数 malloc() と free() よりも、 演算子 new と delete を使うべきである。 例えば次のようなプログラムになる。
/*
* prog11-C++.cpp --- 「動的な配列」をポインターで実現する
* コンパイルするには、たとえば g++ -o prog11-C++ prog11-C++.cpp
*/
#include <iostream>
#include <cstdlib>
using namespace std;
/* n 次元のベクトル x, y の内積を計算する */
double inner_product(double *x, double *y, int n)
{
int i;
double s;
s = 0.0;
for (i = 0; i < n; i++)
s += x[i] * y[i];
return s;
}
int main(void)
{
int i, N;
double *a, *b;
cout << "二つのベクトルの内積を計算します。" << endl;
cout << "次元を入力してください: ";
cin >> N;
a = new double [N];
b = new double [N];
if (a == NULL || b == NULL) {
cerr << "ベクトルを記憶するメモリーの確保に失敗しました。" << endl;
exit(1);
}
cout << "一つ目のベクトル a の入力\n";
for (i = 0; i < N; i++) {
cout << i+1 << " 番目の成分= ";
cin >> a[i];
}
cout << "二つ目のベクトル b の入力" << endl;
for (i = 0; i < N; i++) {
cout << i+1 << " 番目の成分=";
cin >> b[i];
}
cout << "内積=" << inner_product(a, b, N) << endl;
/* a, b のために確保したメモリーを解法する
* プログラムの最後だからなくても良いが解放の仕方の説明用 */
delete [] a;
delete [] b;
return 0;
}