新城@筑波大学情報です。こんにちは。

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[][] ;

あ、最後のもの駄目なんだけど。これがきちんと説明できれば、大
したものだと思います。誰か説明してみませんか?

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\