#include <iostream> using namespace std; void func(int x); int main() { int p = 1234; cout << p << endl; func(p); cout << p << endl; return 0; } void func(int x) { x *= 2; }関数プロトタイプ宣言の練習を兼ねてわざと関数にint型変数pの値を2倍にするようにした(このぐらいなら
関数に2倍処理してもらう必要ないですからね、普通は)のですが、これで実際にやってみると出力はどっちの出力も1234になってしまいます。つまり、関数で2倍にされておらず、初期化したときのpの値がそのまま出力されていることになります。
しかし、次のようにポインタを使うと、
#include <iostream> using namespace std; void func(int *x); int main() { int p = 1234; cout << p << endl; func(&p); cout << p << endl; return 0; } void func(int *x) { *x *= 2; }こうすると最初の出力は1234に、最後の出力は2468になっています。つまりちゃんと関数が仕事して
います。どうしてこのような違いが生じるのでしょうか?代入の詳しい仕組みに代入は実はコピーである云々と
いう話をどこかで聞いたことがある気がするのですが、その辺が関係しているのかなぁと推察していますが、
やっぱり全然分かりません。