🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.c
Article #751

Re: 質問です

#751
From: Masao Seki
Date: Tue, 17 Feb 1998 00:00
56 lines
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-mail
References: <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