ここから本文です

C言語勉強中の者です。

アバター

ID非公開さん

2020/7/723:23:04

C言語勉強中の者です。

ポインタ配列に関して質問があります。

例えば、
char✴︎ strlist[2] = {"abc", "def",};

という風に書くことができるのはなぜなのでしょうか?
ポインタ変数はアドレスを格納するものなのに、なぜ文字列が格納できるのかがよく分からないんです‥。

閲覧数:
42
回答数:
5

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

n2q37_cppさん

2020/7/819:48:27

これは、言わばコンパイラの親切機能。"abc" と書くと、{'a', 'b', 'c', '\0'} の内容で static const char の配列を用意してくれるというわけなのです。そしてその配列の先頭要素のアドレスが取得される。そのアドレスがポインタに格納されるんですね。

解説動画を作りました。
よろしければご覧ください。

https://youtu.be/M98g3qow-o0

アバター

質問した人からのコメント

2020/7/10 23:28:06

動画とても分かりやすかったです!
ありがとうございました!

ベストアンサー以外の回答

1〜4件/4件中

並び替え:回答日時の
新しい順
|古い順

hjk********さん

2020/7/806:05:59

文字列 "abc" とは、実行時にどこかのメモリ上に連続的に展開された 'a', 'b', 'c', '\0' の4文字のうち、先頭の 'a' へのアドレスのことだから

です。
(※多くの場合)

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

プロフィール画像

カテゴリマスター

2020/7/800:40:26

文字列は、任意の位置に確保されて
各文字列の先頭アドレスが、順番に
[0] と [1] の要素の中に格納される。

こう書きましょうね! って決め事、
文法なんだから、従うしかないね。

has********さん

2020/7/723:47:19

strlistは要素数が2の配列だが、文字列そのものは入っていない。2つの文字列はどこか別のところにあって、その2つの先頭アドレスがそれぞれ入っている。

tre********さん

2020/7/723:35:10

普通"abc"のような文字列はconst char*として扱われるから。

例:printf("%s\n", "abc");//abcと表示される

"abc"は文字列ですが、文字列そのものを渡すのではなく引数としてポインタ(先頭アドレス)を渡しています。

例外的にchar str[]="abc";など文字配列を宣言と同時に初期化する場合にはポインタとしてではなく文字列として値がコピーされます。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる