ID非公開さん
2022/1/26 12:42
2回答
C言語についての質問です。 配列とポインタについてです。
C言語についての質問です。 配列とポインタについてです。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14255928699 この質問でわからないことがあったので質問します。 char (*str1)[5]; と定義すると、これは配列を指すポインタで、アドレスを格納できると思います。ここまでは良いのです。 しかしここから疑問に思うことは、str[0]とすると、str[0]はchar [5]型の配列となり、例えばchar [5]型の配列str2を定義すると str1[0] = str2 とはできません。str1について定義した際はポインタ変数として定義して、初期化もしていないので http://ysserve.wakasato.jp/sugsi/Lecture/c2/e_03-01-05.html#:~:text=%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E5%A4%89%E6%95%B0%E3%81%A8%E9%A0%98%E5%9F%9F%E3%81%AE%E5%88%9D%E6%9C%9F%E5%8C%96&text=%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E5%A4%89%E6%95%B0%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B,%E3%81%A6%E3%81%8A%E3%81%8F%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82 このサイトのように「何も有効なデータを指していない」状態です。 しかしstr[0]と書いた時点で、これは配列型なのでポイント先が自動的に確保され、アドレスを変更できない状態になるのでしょうか? 初心者なので疑問点をうまく説明できているかわかりませんが、ご回答お願いします。
ベストアンサー
ポイント先を確保したから変更できないのではなくて 「『配列変数のアドレスは変更禁止』というコンパイルのルール」 だと理解した方がいいです。 str1は「『char[5]の配列』のポインタ型」です。 このため、str1[0]は「char[5]の配列型」とみなされます。 char a[5]; char b[5]; a = b; と記述すると、左辺が配列型のためコンパイルエラーになります。 これと同じ理由で str1[0] = str2; ができないと考えてください。
1人がナイス!しています
ID非公開さん
質問者2022/1/27 0:00