C言語の定数については、こちらの記事で詳しく解説していますが、記事が長いため、以下のマインドマップと目次を参照していただき、必要な内容を目次から選んで読んでいただけます。
直接定数
1. 整数定数
整数定数は、正の整数、負の整数、ゼロを含む整数です。C 言語では、整数定数は 10 進数、8 進数、16 進数で表現できます。
10 進表記:
これは、0 ~ 9 の数字、369、-663 などの正負の符号で構成されます。
8 進数表現:
0163、036 などのように、先頭に 0 (数字の 0) が付き、その後に 0 ~ 7 の数字が続きます。8 進数は通常、符号なしの数字です。たとえば、0192 と -011 は不正な 8 進定数です。
16 進表現:
先頭に 0x または 0X が付き、その後に 0 ~ 9 の数字と 0x12cd、0X6Fa などの文字 A~F (文字は大文字でも小文字でも構いません) が続きます。16 進数は通常、符号なしの数値です。
知らせ:
整数定数の後に文字 u または U を追加すると、246U などの unsigned int 型とみなされます。
整数定数の後に文字 l または L を追加すると、12L などの long int 型とみなされます。
2. 実定数
実定数は実数であり、浮動小数点型とも呼ばれます。C言語では実数は10進数でしか表現できず、実数を表現する方法には10進数と指数形式の2つがあります。
- 小数形式
整数部、小数点、小数部で構成され、整数部または小数部が0の場合は省略可能ですが、小数点は省略できません。たとえば、12.345、-.123 などはすべて正しい実数です。
- 指数形式
仮数部、文字 E または e、および指数部で構成され、形式は + (-) 仮数 E 指数です。
1.23E-2、3.14E+3 など、それらが表す値はそれぞれ 1.23 X 10^(-2)、3.14 X10^3 です。
知らせ
実数を 10 進数で表現する場合、小数点とその前後に少なくとも 1 桁の数字が必要です。
実数を指数形式で表現する場合、文字 E (または e) の前後に数字がなければならず、指数部分は整数のみにすることができます。たとえば、12.-E3、1.5E、および E6 はすべて正しくない実数です。
C 言語では、実数型定数はデフォルトで double 型の実数になりますが、数値の後に f または F が付加されている場合 (1.65f、654.87F など)、float 型の実数とみなされます。
3. 文字定数
文字定数は、一対の一重引用符とその括弧で囲まれた文字で表される単一の文字を指します。「a」、「B」、「=」、「$」、「?」などは、有効な文字定数です。C言語の文字定数は以下の通りです。
特徴:
文字定数は一重引用符でのみ囲むことができ、二重引用符や他の括弧で囲むことはできません。
文字定数には単一の文字のみを使用できます。文字列は使用できません。
文字には、ASCII 文字セット内の任意の文字を使用できます。
文字定数を使用する場合、各文字は ASCII コード値を保存するためにメモリ内の 1 バイトを占有します。このため、C言語の文字定数は数値的な性質を持ち、整数と同様の演算に関与することができ、このとき文字のASCIIコードに対する演算を行うことと等価になります。
4. 文字列定数
文字列定数は、「HelloWorld」のように、二重引用符 "" で囲まれた 0 個以上の文字のシーケンスです。
文字列にはスペース文字、エスケープ文字などを使用できます。また、漢字などの文字記号も使用できます。例: "china"、"Hello Visual C"、"\t Visual C" など。文字列にはヌル文字も使用できます。たとえば、「」は空の文字列を意味し、文字が含まれません。
1. 文字列定数はメモリ内の連続した記憶単位を占有します。システムは各文字列の末尾に文字列の終了マークとして「\0」を自動的に追加します。したがって、n 文字で構成される文字列がメモリに記憶されます。 n+1 バイトのスペースを占有します。
sizeof 演算子を使用すると、文字列が占めるメモリ領域のサイズを計算できます。
たとえば、文字列定数「Hello\nWor」は 10 バイトのメモリ空間を占有し、ストレージ図は次のとおりです。
H |
e |
私 |
私 |
ああ |
\n |
W |
ああ |
r |
\0 |
2. 文字列の長さは、文字列に含まれる有効な文字の数と等しくなります。たとえば、「HelloWorld」の長さは 10 です。文字列内で '\0' ('\0' は文字列の終わり) に遭遇すると、文字列が終了したとみなされます (たとえば、"Hello\0World" の長さは 5 です)。文字列にエスケープ文字が含まれている場合、1 つのエスケープ文字が 1 つの文字として使用されます。たとえば、「HelloWorld\t」の長さは 11 です。strlen() 関数を使用して文字列の長さを計算できます。
知らせ
文字定数と文字列定数ではメモリ上の格納状況が異なり、例えば「6」はメモリの1バイトを占有し、そのASCIIコードが格納されますが、「6」はメモリの2バイトを占有し、「6」は1バイトに格納されます。 、他のバイトには「\0」が格納されます。文字変数に文字定数を代入することはできますが、文字変数に文字列定数を代入することはできません C言語では文字列型の変数がないため、文字列は文字配列で解くのが一般的です。
記号定数
C 言語では、記号定数と呼ばれる識別子を使用して定数を表すことができます。シンボリック定数は使用する前に定義する必要があり、その一般的な形式は次のとおりです。
#define 識別子の定数値
このうち #define はマクロ定義コマンドと呼ばれるコンパイル前処理コマンドであり、記号定数と呼ばれる識別子をその後の定数値として定義する機能を持ちます。1 つの #define コマンドで定義できるシンボリック定数は 1 つだけです。複数のシンボリック定数を定義する場合は、複数の #define コマンドを使用する必要があります。
シンボリック定数を使用すると、さまざまな機能を提供できます。
利点:
プログラムの可読性が向上します。識別子を通じて定数の意味を知ることができ、つまり名前を知ることができます。
プログラムの保守性の向上:シンボル定数を使用して定数を変更すると、定数の定義時にのみ変更するだけで済むため、非常に便利です。
プログラム コードの簡素化:複雑な式の繰り返し入力は、シンボリック定数を使用して簡素化できます。
便利な配列定義:配列の長さとして整数のシンボリック定数を使用できます。