- ベストアンサー
ポインタで分からないことがあります。
つい最近C言語の勉強を始め、現在ポインタの勉強をしています。 過去の質問を検索したり、サイトを見てみましたが、一人の力では解決できませんでしたので質問させていただきます。 ポインタのプログラムで、下記のプログラムについて分からないことがありました。 ――――――――――――――――――――――――――――――――― #include <stdio.h> int main (void) { char *str = "abc"; printf ("%s %d %d\n", str, &str, &(*str)); str = "日本語"; printf ("%s %d %d\n", str, &str, &(*str)); return 0; } ――――――――――――――――――――――――――――――――― このプログラムで、「char *str = "abc";」の部分でstrには abcのアドレスが入っていると思っていたのですが、 1度目の「printf ("%s %d %d\n", str, &str, &(*str));」で、 結果が「abc 1245064 4235560」となっているのを見ると 私の見解は間違っている気がします。 「char *str = "abc";」の部分では一体なにが行われているのでしょうか? また、このプログラムをコンパイルして実行した結果が、 abc 1245064 4235560 日本語 1245064 4235574 となったのですが、なぜstrのアドレスは同じなのに、 &(*str)のアドレスは異なるのでしょうか? 質問をまとめますと、以下の2つです。 1.「char *str = "abc";」の部分では一体なにが行われているのでしょうか? 2.「abc」と「日本語」のstrのアドレスは同じなのに、&(*str)のアドレスは異なるのでしょうか? 初心者ですので言葉の足らない部分があるかもしれませんが、ご教授のほどよろしくおねがいします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (4)
- nerosuke
- ベストアンサー率33% (39/115)
- nerosuke
- ベストアンサー率33% (39/115)
- semona
- ベストアンサー率20% (1/5)
- Chronos198
- ベストアンサー率30% (105/349)
お礼
「char *str = "abc";」を書いた後に、「str = ○△□」を代入すると、 先に書いた「char *str = "abc";」の宣言によって、 str には ○△□ の文字ではなく ○ のアドレスが入ることになる ということですね? str に "日本語" を代入しても文字ではなくそのアドレスが入るということでようやくスッキリしました!!これで str == str *str == str[0] &(*str) == &str[0] も分かりました!! 私の何回もの質問に丁寧に答えていただき本当にありがとうございました。 良回答20点10点両方差し上げたいくらいです!! 本当にありがとうございました。またCの勉強を頑張っていきます。 機会がありましたら、また質問させていただきます。 そのときはよろしくお願いします。では。。。