アフィリエイト広告を利用しています

広告

posted by fanblog

2017年09月28日

《その54》 ポインタによる文字列 / 文字列の配列(p.303演習8-4)


文字列リテラル

 配列による文字列
    char str[] = "ABC";

cout << str; … "ABC"
要素str[0] … 'A'
要素str[1] … 'B'
要素str[2] … 'C'
要素str[3] … '\0'

str = "XYZ"; // 代入はNG(エラー)


 ポインタによる文字列
    char* ptr = "PQR";

cout << ptr; … "PQR"
要素ptr[0] … 'P'
要素ptr[1] … 'Q'
要素ptr[2] … 'R'
要素ptr[3] … '\0'

pqr = "XYZ"; // 代入はOK

◆ ポインタによる文字列は、ポインタptrと文字列"PQR"の両方が記憶域を占有する。



文字列の配列

 《配列による文字列》の配列
    char a[][5] = { "LISP", "C", "Ada" };

a[0][0] :"L" , a[0][1] :"I" , a[0][2] :"S" , a[0][3] :"P" , a[0][4] :"\0"
a[1][0] :"C" , a[1][1] :"\0", a[1][2] :"\0", a[1][3] :"\0", a[1][4] :"\0"
a[2][0] :"A" , a[2][1] :"d" , a[2][2] :"a" , a[2][3] :"\0", a[2][4] :"\0"

cout << a[0]; … "LISP"
cout << a[1]; … "C"
cout << a[2]; … "Ada"

sizeof(a); … 15
sizeof(a[0]); … 5
sizeof(a[1]); … 5
sizeof(a[2]); … 5

◆ 初期化子の文字列リテラルが連続して配置されることが保証されている。


 《ポインタによる文字列》の配列
    char* p[] = { "PAUL", "X", "MAC" };

p[0][0] :"P" , p[0][1] :"A" , p[0][2] :"U" , p[0][3] :"L" , p[0][4] :"\0"
p[1][0] :"X" , p[1][1] :"\0"
p[2][0] :"M" , p[2][1] :"A" , p[2][2] :"C" , p[2][3] :"\0"

cout << p[0]; … "PAUL"
cout << p[1]; … "X"
cout << p[2]; … "MAC"

sizeof(p); … 12(ポインタ三つ分のサイズ)
sizeof(p[0]); … 4 (ポインタのサイズ)
sizeof(p[1]); … 4 ( 〃 )
sizeof(p[2]); … 4 ( 〃 )

◆ 初期化子の文字列リテラルが連続して配置されるという保証がない。




新版明解C++入門編 p.303 演習8-4
 List8-11 では、各配列の個数 3 が定数としてプログラム中(for文の制御式)に埋め込まれている。計算によって書きかえたプログラムを作成せよ。

// p303_演習8-4
#include <iostream>
using namespace std;

int main()
{
char a[][5] = {"LISP", "C", "Ada"};
char* p[] = {"PAUL", "X", "MAC"};

for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
cout << "a[" << i << "] = \"" << a[i] << "\"\n";

for (int i = 0; i < sizeof(p) / sizeof(p[0]); i++)
cout << "p[" << i << "] = \"" << p[i] << "\"\n";
}

b08_04.png


新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/8/30 21:02時点)









--
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/6751937
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。