初歩的なことですみませんが下記で上手く行かない理由を教えてください。
main (){
Int a;
xx(&a)
}
xx(*a){
Int b;
b=1;
a=&b;
}
上記でmain側でa=1とならない理由がいまいちピンときていません。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
やりたいのはこーゆー↓ことか?
C
1#include <stdio.h> 2 3int global = 456; 4 5void xx(int **a){ 6 *a = &global; 7} 8 9main (){ 10 int b = 123; 11 int* a = &b; 12 13 printf("before: %d\n", *a); 14 xx(&a); 15 printf("after : %d\n", *a); 16}
投稿2019/04/27 02:53
総合スコア16614
0
ベストアンサー
y_waiwaiさんが書かれていることがほぼ全てなのですが、それでもピンと来なかったら、以下のように考えてみてはどうでしょうか。
今回、質問者さんがやっている処理を身近なものに置き換えてみると、
main君がxx君に「後で連絡して」とメールアドレス(ラインのアカウントでも良い)を書いた紙を渡します。
これが
xx(&a);
の部分ですね。
xx君は家に帰ってから何を思ったのかその紙に書かれているアドレスをbのものに書き換えました。
a=&b;
これでXX君がaというアドレスにメールを送ったら、bにたどり着きます。
しかし、aのアドレスを渡したmain君は待てど暮らせど連絡が来ません。
こんな感じになります。つまり、アドレスを受け取った側はそのアドレスが指すものを書き換えると、アドレスを渡した側に反映させることができますが、アドレスそのものを別のものに変えてしまったらもう元の値とは何の関係もないものになるということです。
投稿2019/04/27 02:05
総合スコア3041
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ローカル変数bは、その関数を抜けると破棄されてしまいます
んで、
a=&b;
aにアドレスを代入したところで、呼び出し元には反映されません
アドレスを代入するんではなくて、ナカミを代入しましょう
*a = b;
投稿2019/04/27 01:49
編集2019/04/27 01:52総合スコア87774
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/27 02:31
2019/04/27 02:46
2019/04/27 08:20
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/27 08:21