ゾンビでもわかるC言語プログラミング

C言語入門者の応援をします

配列と文字列の関係

次のコードを実行してみましょう。

 1  #include <stdio.h>
 2  
 3  int main() {
 4     char s[10];
 5  
 6     s[0] = 'H';
 7     s[1] = 'e';
 8     s[2] = 'l';
 9     s[3] = 'l';
10     s[4] = 'o';
11     s[5] = 0;
12  
13    printf("%c\n", s[0]);
14     printf("%s\n", s);
15  
16     return 0;
17  }
H
Hello

上記のコードでは、4行目で、char 型の配列 s を要素数 10個で宣言しています。 それから、6 ~ 10行目では、配列に文字を格納しており、11行目では、0を格納しています。

13行目では、配列 s の 0 番目を文字として表示しています。これはもちろん "H" が出力されます。
次の14行目では、配列 s を文字列として表示しています。
すると、"Hello" が出力されました。
これはどういうことでしょう?

実は、文字列は、ただの文字の配列で、以下のようになっています。

f:id:Garfields:20171031071354p:plain

また、最後の 0 は、文字列の終了をコンピュータに教えるために記述します。

これを確かめるために、以下のコードを実行してみましょう。

#include <stdio.h>

int main() {
    char *s = "Hello";

    printf("%c", s[0]);
    printf("%c", s[1]);
    printf("%c", s[2]);
    printf("%c", s[3]);
    printf("%c", s[4]);
    printf("\n");

    return 0;
}

出力は以下になるかと思います。

Hello

これで、文字列はただの文字の配列ということがわかりました。

書籍

新・明解C言語 入門編 (明解シリーズ)

新・明解C言語 入門編 (明解シリーズ)

苦しんで覚えるC言語

苦しんで覚えるC言語

やさしいC 第5版 (「やさしい」シリーズ)

やさしいC 第5版 (「やさしい」シリーズ)

C実践プログラミング 第3版

C実践プログラミング 第3版