C言語での質問です。
いきなりですが、
char str[3] = "AAA";
char *str = "AAA";
先頭のアドレスを両方とも仮に0番として上記の2つを比べた場合、0番地、1番地、2番地に入る値にそれぞれ違いはあるのでしょうか?
回答(3件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
>char str[3] = "AAA"; は 間違いですね コンパイルしたら エラーがでました。
仮に
(1)char str[3] = {'A','A','A'};
(2)char *str = "AAA";
として
(1)は 1バイトの領域を3個 とってます。
0番地 []
1番地 []
2番地 []
(2)は、(32ビット処理系として) char型のポインターを入れる領域をとっているので 4バイト 取ってます。
(この変数に入る(入れる)のは 32ビットのchar型のポインター です。)
0番地 []
1番地 []
2番地 []
3番地 []
(1)の場合は
0番地 'A'
1番地 'A'
2番地 'A'
(2)の場合は (リトルエンディアンとして)
仮に ”AAA"を割り付けた番地を0x01020304とすると
0x01020304番地 'A'
5番地 'A'
62番地 'A'
str 0番地 0x04
1番地 0x03
2番地 0x02
3番地 0x01
となります。
この回答へのお礼
わざわざ試してもいただき、ありがとうございました。
納得できました。
No.2ベストアンサー10pt
0~2番地に入る値は、前者も後者も同じ(すべて'A')です。
ただし、0~2番地の内容を書き換えられるのに対し、
後者は書き換えられません。たぶん、実行時にエラーが出ます。
この回答へのお礼
回答ありがとうございました。
No.1ベストアンサー20pt
「先頭のアドレスを両方とも」という意味が不明です。
あと、上の char str[3]; は配列のサイズが危険です。
char str[3] = "AAA";
は、str[3]という配列を"AAA"で初期化しているので、str[3]の中に各々'A'の値が入ります。
char *str = "AAA";
の方は"AAA"という文字列リテラルのポインタを、strに代入しているだけです。
「str」が0番地、"AAA"が100番地にあったとすると、
0番地の値は上が'A'ですが、下は100(この値は処理系によって違う場合がある)となります。
この回答へのお礼
違いがよくわかり、助かりました。
ありがとうございました。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示












