09/02/24 14:01:41 cPcauKWt
>>568
あー、いや、そんなむずいもんじゃないにょ。
多分俺の書き方が悪い。ぶっちゃけズゴックって言いたかっただけ。
構造体に限らず、変数はメモリのどっか特定のアドレスに格納される。
変数のアドレスは変数名の前に&付けると取り出せて、ポインタ変数へ保存できる。
int *pi;でint型のポインタ変数piが作れるように、S *ps;でS型のポインタ変数psが作れる。
int ai[num];でint型num個の配列aiが作れるように、 S as[num];でS型num個の配列asが作れる。
構造体のメンバにポインタ経由でアクセスする時は「.」じゃなく「->」。
構造体配列sのi番目の要素のメンバにアクセスする時はs[i].member。
>>567のtypedefのとこは純C用の書き方。C++ならふつーにstruct S{char the_red_comet};でいい。
ちなみにfunc2(S ps[], int num)のとこは実際はfunc2(S *ps, int num)と同じだったりする。
配列にsizeof使うと配列全体のサイズが取れるけど、関数に渡した場合その中では
配列じゃなくポインタが正体なんで、sizeof使ってもポインタのサイズしか取れないのに注意。
配列の名前は単体で使うと先頭要素のアドレスを指すポインタになるんで、
呼ぶ時にfunc2(&as[0], sizeof as/sizeof as[0])としても同じ。
(関数に配列渡してる訳じゃなく、ポインタを渡してる)
うん、確かに自分で言ってて難解な気がしてきた。俺は説明が下手だ。
このへんは構造体の話というより配列とポインタの話やね。
細かいこと気にせず動きゃいーんだの精神でがんがれ!