<const修飾子>
関数に対して配列を引数として渡すと、必然的にアドレス渡しになるので、関数側ではその配列の中の値を書き換えることができます。
(呼び出し元)
int
data[DATA_SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int
result[DATA_SIZE];
...
calculate(data,
result, DATA_SIZE);
...
(関数側)
void
calculate(const int *src, int *dst, int n) {
int
i;
for
(i = 0; i < n; i++) {
dst[i] = src[i] + 1;
}
}
上の例では、関数calculate内で、配列dataの値を使った計算結果を配列resultに格納しています。これはポインタ仮引数dstで配列resultのアドレスを受け取っているから可能なわけです。
元データのdataのアドレスも関数に渡していますが、この中身は関数側では書き換えられては困ります。そのような場合は、「const型修飾子」をつけることで、中身を書き換えることができないようにすると安全です。constをつけて宣言したポインタ(上の例ではsrc)が指すアドレスに書き込むようなプログラムを書くと、コンパイラがエラーを返します。