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


C ポインタ
2006年08月06日 (日) | 編集 |
また訳の分からん概念が出てきた。
いやもう勘弁って感じだが、重要な概念らしいので避けては通れない。
頑張ろう。
俺らは例えば

int a,b;

のようにデータ型を指定して変数を宣言して

a=10;
b=20;


のように宣言された変数に値を代入するというイメージで、つまり変数を媒介にしてデータを扱っているわけなんだが、実際に、物理的には、メモリというデータを記憶しておく場所(アドレスと呼ぶ)に変数a、bを割り当てて、そこに数値としてのデータ10や20を格納しているのだそうだ。

ポインタってのはこの変数が割り当てられているメモリのアドレスを元に、そこにあるデータを取り出したり格納したりすることが出来る概念なのだと。
このことをデータを参照するって言うらしいな。


ここまではまあいいな? ポインタってのは何かっていう定性的な話だ。
次からはガクガクブルブルな定量的な話になる。


ポインタ変数は(ポインタ変数が何なのか、というのは特に説明されていないが、多分ポインタという概念を扱うための変数のことだろうよ)

int *pa;

のように変数名paの前に*をつけて宣言する。これは変数paがint型データを参照する為のポインタ変数であることを意味しているのだそうだ。
ポインタ変数の名前はpaであり、*paではないことにはくれぐれも注意な。

で、ポインタってのは上で述べた通り、メモリ上のアドレスを参照してデータの取り出し格納を行う概念であるからして、ポインタ変数でデータをどうにかこうにかしようと思ったらそのデータが割り当てられているメモリのアドレスを代入しないとならないわけだ。
が、このアドレスがメモリのどこなんて分かるわけない。

そこで、変数のアドレスを取り出す演算子&を使って

&a

と表現する。これで変数aのアドレスになるのだそうだ。
後はこれを

pa=&a;

と記述してポインタ変数paに代入してやれば、ポインタ変数paは変数aのメモリ上のアドレスを参照して、変数aに格納されているデータを取り出したり、逆に格納したり出来るようになるのだとさ。


何言ってるのかさっぱり分かりゃしねー

なので例によってそういうことにしておいて先に進むぜ。


さて、これでポインタ変数paで変数aのデータをどうにかこうにか出来る状態にはなったらしいのだが、実際にどうやってデータを参照するのか?

b=*pa

こうするんだと。上の式を訳すと、
「変数bにポインタ変数paに代入されているメモリのアドレス上にあるデータ(この場合は変数aのデータ)を参照して値を代入するぜ」
って感じになるらしい。

b=a;

でいいじゃん、なんでこんなまだるっこしいことするんだってこれだけだと思うかもしれないが、実はポインタは文字列や配列のようにメモリ上に連続して置かれているデータを参照する場合や、関数との間でデータをやり取りするときに効果を発揮するんだぜ?






知らんがな

未来の俺よ後は任せた。



ポインタ演算子

*…ポインタによって指し示されるアドレスの内容を参照する

&…変数が割り当てられているメモリ上のアドレス(オフセット値)を取り出す

オフセット値…面倒なので省略。必要なときがきたら学習する


最後にポインタのサイズについて。

int *pa;
char *pb;


という2つのポインタが宣言されていたとする。ポインタpaはint型データを参照し、pbはchar型データを参照する。このとき取り出されるデータのサイズはそれぞれ2バイトと1バイトだが、ポインタ変数pbのサイズはpaと同様2バイトである。データのサイズはともかく、ポインタ変数のサイズはint型を参照しようがchar型を参照しようが変わらんということだな。


つっても何に使うんだこれ


まとめよう。

ポインタは実際にデータを格納しているメモリのアドレスを元にデータを参照する
ポインタ変数は変数名の前に*をつけて宣言する
ポインタ変数にある変数のアドレスを代入するには&変数名を使う
ポインタ変数のサイズはデータ型の種類に因らず2バイトである?
友人が置いていったアニメDVDの枚数…31枚



今回はワケ分からんことばかりだったな。
特にどうするんだ最後の。見る暇なんてねえぞ。

フルメタはどうにかして見たいけど。
スポンサーサイト

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