c言語のchar

c言語のcharについて。

# cat cha.c
#include 

int main(int argc, char *argv[]) {

        char *c1;
        c1="a";
        printf("c1: %d %s\n", c1, c1);

        c1++;
        printf("c1: %d %s\n", c1, c1);

        c1="hello";
        printf("c1: %d %s\n", c1, c1);


        char c2;
        c2 = 'a';
        printf("c2: %d %c\n", c2, c2);

        c2++;
        printf("c2: %d %c\n", c2, c2);

        c2 = 'c';
        printf("c2: %d %c\n", c2, c2);

        return 0;
}


# ./a.out x
c1: 4196104 a
c1: 4196105
c1: 4196116 hello
c2: 97 a
c2: 98 b
c2: 99 c


charというのは「1文字」である。
1文字なので、"hello"とかを代入できない。

上記の例では、c1は char *c1
c2は char c2
と定義(宣言?)している。

注目すべきはc1, c2に代入するときの引用符で、c1は"", c2は''にしている。

ポインタ宣言(という言い方でいいのか)した場合は"", そうでない場合は'' である。

c1に'a'を、c2に"hello"を入れようとするとコンパイルでエラーになる。

char *c1;
としたときはc1はポインタなので、%dで表示するとその内容はアドレスになる。
char c2;
としたときはc2は文字なので、%dで表示するとその内容は文字コードになる。

c1はポインタなので、インクリメントしても未定義の値が表示される。
c2は文字なので、aをインクリメントするとaの次の文字コードであるbが表示される。