関数の中で引数で受け取った値を変化させたい場合もあると思います。
そういうときに、先ほど解説したポインタが活躍します。
関数の引数に『変数がある場所を渡せば、どこを書き換えていいかがわかるよね?』 と言うことです。
では、まずポインタの使い方の話をしてみましょう。
-----
int data = 10;
int* addres = &data;
-----
まず、data という変数を定義します。ここは何の問題もないはずです。
次の行で見たこともない記述が2箇所出てきていますね。
とりあえず 『int*』 について説明します。
これは 『int 型の変数のアドレスを格納できる型』です。
『&data』 とは 『data変数のアドレス』 という意味があります。
つまり、この2行は
・data 変数を宣言
・data 変数のアドレスを address に代入
という意味があるのです。
では、アドレスにするのはイイとして、元の変数の形に戻すにはどうすればいいのでしょうか?
-----
int data = 10;
int* addres = &data;
int data2 = *address;
-----
このように 頭に 『*』 を付けることで、元に戻すことが出来ます。
では、早速今回の目的である 関数の中での変数の内容変更を
関数の呼び出し元にも反映させるプログラムを書いてみましょう。
-----
void func( int* value ){
*value++;
printf( "value : %d\n", *value );
}
int main(){
int data = 0;
func( &data );
printf( "data : %d\n", data );
return 0;
}
-----
このようにすれば、実行結果は
-----
1
1
-----
となります。