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)が指すアドレスに書き込むようなプログラムを書くと、コンパイラがエラーを返します。

 

 

戻る