Article View: fj.lang.c
Article #751Re: 質問です
From: Masao Seki
Date: Tue, 17 Feb 1998 00:00
Date: Tue, 17 Feb 1998 00:00
56 lines
2640 bytes
2640 bytes
しゅういち wrote:
> 01: #include <stdio.h>
> 02:
> 03: void main(void)
> 04: {
> 05: char *cp;
> 06: int x;
> 07: x = getchar();
> 08: switch(x){
> 09: case '0':
> 10: cp = "abc";
> 11: break;
> このプログラムは正常(?)に動作します
そうですね。非常にシンプルなまっとうな記述です。EOFやエラー処理の事は
別にして。
> このプログラムの 10,13,16,19行目にある命令文はC言語の仕様から見て
> 正しいのでしょうか? (初期化ではない)
i) char ss[] = "abc";
ii) char *cp = "xyz";
は抵抗がないけど、
iii)
char *cp;
・
・
cp = "xyz";
は動作が良くわからないという質問でしょうか。
ii)もiii)もシステムが管理する領域のどこかに'x','y','z','\0'というデータ
が書き込まれ、その先頭番地('x'の番地)がポインタ変数cpに代入されます。
ii)とiii)の違いは、初期化(すなわち、ポインタ変数cpの領域を確保すると
同時にアドレスデータを書き込む)か、普通の代入文かという違いだけです。
ついでに言うと、i)は、userが管理する(read/writeできる)領域にssという
名前で(この場合は)4byte分のエリアを確保し、'x','y','z','\0'という
データそのものを書き込みます。(これは、解っていますね。)
> cp = "abc" で、ポインタ cp に文字列 "abc" へのポインタが入れられるのは
> わかるのですが、式の右辺 "abc" はどのような動作をするのでしょうか?
何が疑問なのか今一判然としないのですが、上の説明で答えになっているで
しょうか。
> 文章を書くのが苦手なんで、読みにくかったらすみません。
特に人を不快にさせるほどひどくなければ、あまり気を使う必要はないと
思います。それより、件名は、もっと質問の内容を反映させたものにしましょ
う。そうでないと、本当に詳しい方々が読んでくれなくて、私のような素人
が嘘のレスを書いてもフォローして貰えません。
--
関 正生 <masao.seki@fujixerox.co.jp || ma-seki@gb3.so-net.or.jp>
Technical Details
Message-ID:
<34E92B89.1B11@rim.crl.fujixerox.co.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<6ca43a$c7v$1@news.twin.ne.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: 106434,200412f6fe640ef9 X-Google-Attributes: gid106434,public From: Masao Seki <seki@rim.crl.fujixerox.co.jp> Subject: Re: 質問です Date: 1998/02/17 Message-ID: <34E92B89.1B11@rim.crl.fujixerox.co.jp> X-Deja-AN: 325793518 Content-Transfer-Encoding: 7bit References: <6ca43a$c7v$1@news.twin.ne.jp> Mime-Version: 1.0 Reply-To: masao.seki@fujixerox.co.jp Content-Type: text/plain; charset=iso-2022-jp Organization: Fuji Xerox Newsgroups: fj.lang.c