Re: Array and pointer
新城@筑波大学情報です。こんにちは。
In article <20031130120626.CEAF.GENERAL-S@mail.goo.ne.jp>
General Shadow <general-s@mail.goo.ne.jp> writes:
> char c[5];
> char* pc1;
> pc1 = &c;
> もだめということになるんですよね?
はい。そのままではダメ。キャストかければ許してもいいんじゃな
いかな。
pc1 = (char *)&c ;
配列全体の番地は、配列の先頭の要素の番地と値としては同じとい
うことで。
> とすると、配列を扱うためのポインタは常に
> char (*pc2)[5];
> のように宣言しなければならないということになるのですよね?
配列へのポインタと配列の要素へのポインタは別物です。
構造体へのポインタと構造体の要素へのポインタが別物のように。
「配列を扱うためのポインタ」って、どちらですか?
構造体の場合は、こんな感じ。
struct
{
char c0,c1,c2,c3,c4;
} s5 ;
pc1 = (char *)&s5 ;
pc1 = &s5.c0 ;
> 同様に、pc1[0]も言語仕様上あってはいけない、という論理展開に
> なるのですよね?
いいえ。それは ok でいいんじゃないですか。
int i;
c = *(pc1+i); // ok.
c = pc1[i]; // ok. 上と同じ意味。
つまり、ポインタ変数があった時に、[]というオペレータをどうい
う意味にするかという話です。今のCと同じで上のような意味でい
いんじゃないですか。
In article <3FC984FF.3030909@jcom.home.ne.jp>
Shinobu Kumaoka <titokani@jcom.home.ne.jp> writes:
> pc1=&c[0];
> と、明示的に書きましょうということでは。
はい。それも ok。上に書いたようにキャストも ok。
> 歴史のifを検証するのは面白いですが、当時の事情も理解できますし、
> 今の仕様がそれほどダメなものだとも私は思いません。
私は未来の話が好きです。
main() の引数の argv ですが、いろいろな宣言の仕方があります。
char **argv ;
char *argv[] ;
char argv[][] ;
あ、最後のもの駄目なんだけど。これがきちんと説明できれば、大
したものだと思います。誰か説明してみませんか?
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735