ポインタと配列 | spin on the RITZ

ポインタと配列

char  str[100];


scanf("%s", &str);



で読み込んでいるソースがあって


「あれ?&strでもいいんだっけ?」と思いまして、実際&strとstrの違いをプログラムしてみたところ、

二つとも同じアドレスをさしていました('A`)マジカヨ



あんまりこういう使い方はしたことがなかったので改めて調べてみると


&str → char型配列の先頭へのポインタ

str  → char型配列の先頭要素へのポインタ


であることが判明。さしてるところは同じだけど、ポインタの型が違うんだね~!多分納得!

&strが”char (*)[100]”型で、strが”char *”型になる訳ですよ!


なるほどねー


str+1ですすむアドレスは1バイト分

&str+1ですすむアドレスは100バイト分



scanf()の引数として&strをつかうのは別に大丈夫みたいだけど、一次元配列を引数に持つような関数だと多分警告とかエラーが出ると思うな。型自体が違う訳だし。





C言語ではよくポインタでつまづくとかいいますけど、僕の知り合いもかなりつまづいてました。その人のソースの修正をよくやっていたのですが、もう、正直、何度投げ出そうかと思ったかorz