概ね方位不定だが多分割と偏っている
スポンサーサイト
--年--月--日 (--) | 編集 |
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


C 例題9 ポインタ変数
2006年08月06日 (日) | 編集 |
ポインタは正直訳わからんかったので例題で慣れる必要があるぜ。
まあ例題無しでどうにかなった概念自体無かったけどな。


勝利条件:
「変数a,bがメモリ上に次のように配置されているとした場合
pointer_ex.jpg

int a=10,b=20,dumy,*pa,*pb;
pa=&a;
pb=&b;
dumy=*pa; (dumyは*paの内容を一時的に保存しておく為の変数)
*pa=*pb;
*pb=dumy;

を行ったときの変数a,b,pa,pbの値を答えろや」



攻略方法:
自分でコード書かない例題ってのも何だが、偶にならいいだろう。
んじゃ、順番に見ていこうか。

int a=10,b=20,dumy,*pa,*pb;

整数型で変数a、b、dumy、ポインタ変数pa、ポインタ変数pbを宣言。
ついでにaに10、bに20を代入している。

現時点での値:
a=10,b=20,dumy=?,pa=?,pb=?


pa=&a;
pb=&b;

ポインタ変数paに変数aのアドレス(0x2000)を代入。
ポインタ変数pbに変数bのアドレス(0x2010)を代入。

現時点での値
a=10,b=20,dumy=?,pa=0x2000,pb=0x2010


dumy=*pa;

変数dumyにポインタ変数paが指定しているアドレスのデータの参照(10)を代入。

現時点での値
a=10,b=20,dumy=10,pa=0x2000,pb=0x2010


*pa=*pb;
*pb=dumy;


ポインタ変数paの指定のアドレスのデータの参照(10)にポインタ変数pbが指定しているアドレスのデータの参照(20)を代入。
ポインタ変数pbの指定のアドレスのデータの参照(20)に変数dumyのデータ(10)を代入。

さて。*pa=20である。*paはポインタ変数paによって指定されるアドレスのデータの参照である。ポインタ変数paが指定しているアドレスは変数aのアドレスである0x2000であり、このpaにより指定されているアドレスに*pbの値20が代入されたので、当然このアドレスに格納されている値を扱っている変数aの値は20になる。
同様にpbの場合もポインタ変数pbが指定している変数bのアドレスにdumyの値10が代入されたので、変数bは10になる。

よって、答えは

a=20
b=10
pa=0x2000
pb=0x2010

になる。

全くややこしい。
スポンサーサイト

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。