雑記
ぽいんた
最終更新:
匿名ユーザー
-
view
C言語(およびその派生言語)習得において、初心者が最初にぶつかる難関が「ポインタ」だとよく言われる。
・・・ホント?
いえね、ポインタで躓かなかったんですよ。いえ自慢じゃなく。ホントに。
まあアセンブラなんてものが先にあったからかもしれませんが。その意味では一般的ではないのかな?
で、ポインタのお話なわけですが。
ようは、「ポイントする」から「ポインタ」(笑)
怒らないで(笑)。ホントにそれだけなんですってば。
C言語って、イマドキのご親切な、まるでプレステ以降のファイナルファンタジーみたいな言語と違って、とっても尖がってるんですよええ。
自分で確保したり、利用したりするメモリ上の領域は、自己責任で管理してやら無いといけない。C言語で提供されているのは、その領域の「先っぽ(厳密には先っぽだけではないけど)」をあらわすことができる変数。それがポインタ。
例えば、
unsigned char* ucpHoge; ucpHoge = malloc((size_t)100);
なんてやると、hogeには100バイトの領域の「先っぽ」が入る。
また、
char* cpPiyo = "hello world\n";
ならcpPiyoに"hello world\n"という文字列定数の、「先っぽ」が入る。
・・・なにかに、似てませんか?
そう、配列のお名前。これもやっぱり、「先っぽ」をあらわす。
例えば
unsigned char ucaHuga[100];
ならucaHugaという識別子は100バイトの領域の「先っぽ」をあらわす。
なので、C言語ではポインタと配列を、「ほとんど」同じものとして扱える。異なるのは、sizeof演算子で領域のサイズが取得できるかどうかとか、それくらい(他にもあるけど)。
実際、上の配列に対してucaHuga[10000]なんてアクセスの仕方をしてもコンパイラは文句言わない。あまつさえucaHuga[-1]なんてアクセスの仕方もできる。
つまり、C言語っていう言語は「先っぽ」は教えてあげるけど、ケツは(失礼!)自分で管理しやがれ、という言語なのだ。
実際、C言語に「文字列」は存在しない。あるのは、char型の配列だけ。文字列として扱う場合には、最期にNULL文字('\0')を入れることで、お尻を自分で管理しているのだ。
・・・ちょっと書ききれない(笑)
続きます。
続きます。