
char型の配列
char buff[20] = "abc "のように'や,で区切られていないchar型の配列とは違い
char buff[20] = { 'a', 'b', 'c', '\0' };①のような場合と
char型へのポインタ配列
char *parr[3] = { "abc", "de", "hello" };②
において
なぜ、①、②は初期値を中括弧で囲む必要があるのでしょうか?
また、逆に初期値に中括弧で囲む必要がないのはchar buff[20] = "abc "のようにまとまった文字列を扱う場合でしょうか?
最後にchar型のポインタ配列とは
1番目の文字列"abc"の先頭の文字aのアドレスがparr[0]に入り、2番目の文字列"de"の先頭の文字dのアドレスがparr[1]に入り."hello"の先頭の文字hのアドレスがparr[2]に入る解釈で正しいでしょうか?
ちなみに、仮に正しい場合は64bitのpcな
ら先頭の文字のアドレスは64bitであるため、アドレスの入るparr[0]、parr[1]、parr[2]のメモリはそれぞれ64bitなのでしょうか?
どうかわかりやすく教えて下さい。
No.3ベストアンサー
- 回答日時:
配列を初期化するときには初期値を波かっこでくくる
のが原則で, 文字系の型の配列は特別に
文字列リテラルを使って初期化できる
と決まっている.
なお
char buf[20] = { "abc " };
のように書いてもいい.
No.1
- 回答日時:
配列の初期化子は、
波括弧で囲まれた配列メンバのリストと、
文字列リテラルの両方が使えると仕様に定まってます。
参考) 配列の初期化
https://ja.cppreference.com/w/c/language/array_i …
文字列リテラルの実態は char 配列型なのですが、
一般的には暗黙の型変換により、
配列の最初の要素を指すポインタ char* に変換されます。
参考) 配列からポインタへの変換
https://ja.cppreference.com/w/c/language/array#A …
"abc" は char 型の文字列リテラル
→ char 配列型の初期化に使える
{'a', ... } は char 型のリスト
→ char 配列型の初期化に使える
{"abc", ... } は char 配列型のリスト
→ 暗黙の型変換により、char 配列型は char* 型に変換
→ char* 型のリストと見なされる
→ char* 配列型の初期化に使える
64ビットCPU向けのコンパイルを行ったのならば、
アドレスは64ビット幅なので、
ポインタはすべて 64 ビット = 8 バイトになります。
(とは思いますが、実装によるのであしからず)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
C言語の配列のサイズ
-
C# Listを使わずに2次元配列の...
-
C言語 変換指定%sについてです。
-
C言語 少しの疑問
-
プラスの最小数字を表示したい...
-
RGB値を画像(PNG・BMPJPEGなど)...
-
配列をEraseしてもメモリが開放...
-
Redimした動的配列はEraseする...
-
【C言語】配列の中に配列を入れ...
-
配列で格納したものをmsgboxで...
-
Excelですべての組合せ(重複組...
-
C言語において、 配列要素をひ...
-
CStringからchar*への型変換に...
-
isalpha()関数について
-
Integer変数をカラにしたいので...
-
Run-Time Check Failure #3とい...
-
リッチテキストボックスの中身...
-
define で 配列
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
C# Listを使わずに2次元配列の...
-
配列を含む構造体の初期値について
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
【速いブラインドタッチ】手を...
-
テキストファイルから文字列を...
-
ExcelVBAで質問です。離れた二...
-
配列をEraseしてもメモリが開放...
-
メモリの初期値
-
複数の選択範囲の行番号を個別...
-
unsigned char配列への入力の仕方
-
【C言語】配列の中に配列を入れ...
-
VBで構造体の配列を関数に渡す...
-
エラ-メッセ-ジの意味を教え...
-
C# 配列の変数宣言について。
-
C言語 配列の再初期化
-
LGノートPCグラムについて
-
C言語初心者 構造体 課題について
おすすめ情報