lang
1char a[] = "あいうえお"; 2char *b = a;
aの要素数は6で、
a[0] = あ;
a[1] = い;
.
.
a[6] = \0;
となると思うのですが、その配列を *b に代入した場合、どうなるのでしょうか?
bは何になりますか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
配列を代入しているわけじゃなくて、配列の先頭要素をb
に代入しています。
代入後は、a[i]
と書かずにb[i]
と書いてもa
の配列の中身にアクセスできると言うことです。
投稿2015/04/24 13:18
総合スコア84710
0
ベストアンサー
lang
1char a[] = "あいうえお";
aの要素数は6で、
a[0] = あ;
a[1] = い;
.
.
a[6] = \0;
日本語の場合、1文字=char1個分とはなりません。使用する文字コードにもよりますが、Shift-JISやEUCならば aの要素数は11 に、UTF-8(Unicode)ならば aの要素数は16 になります。
英語のアルファベットならば 1文字=char 1個分となるため、基本的な考え方はあっています。下記コードでは aは要素数 6 の配列 になります。(配列インデクスは0始まりですから、終端文字'\0'の位置はインデクス5です。)
lang
1char a[] = "ABCDE"; 2// a[0] = 'A'; 3// a[1] = 'B'; 4// ... 5// a[4] = 'E'; 6// a[5] = '\0';
lang
1char *b = a;
その配列を *b に代入した場合、どうなるのでしょうか?
bは何になりますか?
解釈が少し誤っています。配列の先頭要素を指すポインタが、**(bではなくて)* b
へ代入されます。下記に図解(ぽいもの)を書いておきます。ご参考に。
lang
1char a[] = "ABCDE"; 2char *b = a; 3/* 4 +---+---+---+---+---+----+ 5 a[6] | A | B | C | D | E | \0 | 6 +---+---+---+---+---+----+ 7 ^ 8 | 9 +---+ | 10b | *---+ 11 +---+ 12*/
b
は配列先頭要素を指す、つまり b
== &(a[0])
となります。またbの参照先*b
は 'A' となります。
投稿2015/04/24 16:58
編集2015/04/24 17:37総合スコア6191
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ニュアンスが伝わるか微妙ですが。。。
変数b("*"をつけないbですよ)にa[]の先頭のアドレスが代入されます。
a[]はそのままで、*bがa[]と同じ実体を参照するようになります。
それと、全角文字は1文字1バイトではありません(S-JISは2バイト、Unicodeは3バイトだったような)。
ですので、全角5文字✕全角一文字のバイト数+1バイト(NULL文字)がa[]の要素数になります。
投稿2015/04/24 15:15
総合スコア85
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。