関数が仕事していない?
Posted: 2009年8月19日(水) 19:53
このような簡単なソースコードなのですが、
関数に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;
}
関数プロトタイプ宣言の練習を兼ねてわざと関数に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になっています。つまりちゃんと関数が仕事しています。どうしてこのような違いが生じるのでしょうか?代入の詳しい仕組みに代入は実はコピーである云々と
いう話をどこかで聞いたことがある気がするのですが、その辺が関係しているのかなぁと推察していますが、
やっぱり全然分かりません。