今回は、「配列による文字列の配列」と「ポインタによる文字列の配列」をご紹介しよう。
「文字列の配列を表示するプログラム」である。
なお、本プログラムは、Windows 11 Home(23H2)上で、 Visual Studio Code(1.90.0)を使用して作成し、gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0でコンパイルしている。
//文字列の配列を表示するプログラム
#include <stdio.h>
int main(void)
{
char a[][5] = {"Java","C","PHP"};
char *p[] = {"Ruby","R","CSS"};
puts("配列による文字列の配列");
for (int i = 0; i < 3; i++)
printf("a[%d] = \"%s\"\n",i,a[i]);
puts("ポインタによる文字列の配列");
for (int i = 0; i < 3; i++)
printf("p[%d] = \"%s\"\n",i,p[i]);
}
実行結果
配列による文字列の配列
a[0] = "Java"
a[1] = "C"
a[2] = "PHP"
ポインタによる文字列の配列
p[0] = "Ruby"
p[1] = "R"
p[2] = "CSS"
配列による文字列の配列(2次元配列)
![](https://i0.wp.com/my-studies.org/wp-content/uploads/2024/06/07fa40e6f3af21862dc42762124e1dff.png?resize=341%2C1024&ssl=1)
すべての要素は連続して配置される。
各要素は、初期化子として与えられた各文字列リテラル中の文字とナル文字で初期化される。
ポインタによる文字列の配列(ポインタの配列)
![](https://i0.wp.com/my-studies.org/wp-content/uploads/2024/06/e12ee379f3c1faa8811824d4c7ca3df0.png?resize=702%2C1024&ssl=1)
文字列の配置の順序や連続性は保証されない。
各要素は、初期化子として与えられた各文字リテラルの先頭文字を指すように初期化される。
例えば、文字列リテラル”Ruby”内の文字は、先頭から順に、p[0][0]、p[0][1]・・・でアクセスできる。
(参考) 新・明解C言語 入門編 第2版 柴田 望洋 (著)SBクリエイティブ
コメント