char型とは
char
型は、C言語で最も基本的なデータ型の一つで、1バイト(8ビット)のデータを格納するための型です。
1バイトは、sizeof
演算子の基準となるサイズであり、sizeof(char)
は常に1
となります。
主な用途
-
文字(キャラクター)を扱う
ASCII文字などの1文字を格納するために使われます。
1文字はシングルクォーテーション('
)で囲んで表現します。
例 :char c = 'A';
-
1バイトの整数値を扱う
符号付き(signed char
)または符号なし(unsigned char
)の1バイト整数を格納します。
signed char
の範囲は-128
から127
、unsigned char
の範囲は0
から255
です。
例 :char data = 100;
※よくある間違い
'A'
(シングルクォーテーション)は1文字です。
"A"
(ダブルクォーテーション)は文字列です。末尾にヌル文字\0
が自動で追加されるため、2バイト分のメモリを消費します。
char
型の変数に"A"
を代入しようとすると、型が違うためコンパイルエラーになります。
また、char
がsigned
かunsigned
かは処理系に依存するため、255
のような値を代入すると、予期せぬ結果(オーバーフローして-1
になるなど)が生じることがあります。
範囲を意識した整数値を扱う場合は、明示的にsigned char
またはunsigned char
を指定することが推奨されます。
項目 | char型(文字) | char型(整数) | 文字列(char配列) |
---|---|---|---|
役割 | 1文字を表現 | 1バイト整数を表現 | 複数文字の並びを表現 |
宣言例 | char c = 'A'; |
char data = 100; |
char str[] = "Hello"; |
サイズ | 1バイト | 1バイト |
strlen("Hello") + 1 = 6バイト |
内部表現 | ASCIIコード65
|
100 という数値 |
H,e,l,l,o,\0 の配列 |
出力形式 | %c |
%d |
%s |
#include <stdio.h>
int main(void) {
char ch = 'A';
unsigned char num = 255;
char str_literal[] = "Hello";
char str_array[10] = {'C', '-', 'l', 'a', 'n', 'g', '\0'};
char *str_pointer = "World";
printf("--- 'A'の出力 ---\n");
printf("文字として: %c\n", ch);
printf("整数として: %d\n", ch);
printf("\n");
printf("--- 255の出力 ---\n");
printf("整数として: %d\n", num);
printf("文字として: %c\n", num);
printf("\n");
printf("--- 文字列の出力 ---\n");
printf("文字列リテラル: %s\n", str_literal);
printf("char配列: %s\n", str_array);
printf("\n");
printf("--- ポインタの出力 ---\n");
printf("ポインタが指す文字列: %s\n", str_pointer);
return 0;
}
出力結果
--- 'A'の出力 ---
文字として: A
整数として: 65
--- 255の出力 ---
整数として: 255
文字として: �
--- 文字列の出力 ---
文字列リテラル: Hello
char配列: C-lang
--- ポインタの出力 ---
ポインタが指す文字列: World
※コメントより
#include <stdio.h>
int main(void) {
char c = 'A';
printf("sizeof(c)の結果: %zu\n", sizeof(c));
printf("sizeof('A')の結果: %zu\n", sizeof('A'));
return 0;
}
出力結果
sizeof(c)の結果: 1
sizeof('A')の結果: 4
このように、文字リテラルとchar型変数は異なる扱いを受けるようです。
難しい...