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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語 少しの疑問 4 2022/11/08 02:48
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# 【C言語】全角文字の配列を、全角のまま1文字ずつ出力する方法 4 2023/05/09 15:08
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- Excel(エクセル) Excelの関数で実現可能か知りたいです 5 2023/08/06 08:58
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列で格納したものをmsgboxで...
-
VBで構造体の配列を関数に渡す...
-
配列を使わずに、変数名を動的...
-
簡易暗号化プログラム(文字入れ...
-
ヘッダーファイルからの取り込...
-
配列の参照渡しで型が一致しま...
-
C言語 変換指定%sについてです。
-
Vbaで数式をポーランド記法に変...
-
配列同士の文字列の比較
-
複数の選択範囲の行番号を個別...
-
Excel、VBAのユーザーフォーム...
-
C# Listを使わずに2次元配列の...
-
c言語でのヒストグラム作成用の...
-
char型の配列 char buff[20] = ...
-
先頭アドレスとは何ですか?
-
C++ vectorに配列をプッシュしたい
-
【C言語】配列の中に配列を入れ...
-
銀行ATMの数字キーの配列
-
配列内の文字間を排他的論理和...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
C# Listを使わずに2次元配列の...
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
配列の参照渡しで型が一致しま...
-
ExcelVBAで質問です。離れた二...
-
unsigned char配列への入力の仕方
-
VBで構造体の配列を関数に渡す...
-
C++ vectorに配列をプッシュしたい
-
C言語で特定列だけを抽出して配...
-
Excel、VBAのユーザーフォーム...
-
複数の選択範囲の行番号を個別...
-
配列をEraseしてもメモリが開放...
-
配列を含む構造体の初期値について
-
【速いブラインドタッチ】手を...
-
C言語 配列の再初期化
-
Redimした動的配列はEraseする...
おすすめ情報