変数と定数
1.C言語での定数
C言語での定数は大雑把に分けると,整数,16進数,実数,文字,文字列があります.
- 整数: 0, -22, 37
- 実数: 1.0, -3.14, 2.e-20 (2.掛ける10のマイナス20乗)
- 16進数(数字の前に 0x を付ける): 0x00, 0x0a, 0x0d, 0xff
- 文字: '1', 'a', 'X', '\0' ('\0'は 0x00 と等価)
- 文字列: "abcdefg", "ABC", "X"
'1', "1", 1, 1. はそれぞれプログラムでは大きく意味が違う(ので注意してくださいコンピュータ内部の表現がそれぞれ全く違う).
'1'は文字,"1"は文字列,1は整数,1.は実数です.
また文字列定数の最後には,文字列の区切りとして,表示はされませんが,'\0' が必ず付加されます.
つまり "ABC" = 'A'+'B'+'C'+'\0', "A" = 'A'+'\0' です.
2.C言語での変数
- 整数型(4バイト) int
- 整数型(2バイト) short int
- 整数型(4バイト) long int
- 文字型(1バイト) char
- 実数型(4バイト) float
- 倍精度実数型(8バイト) double
整数・文字型には,符号を考慮しない unsigned を接頭語として付ける事ができます.unsigned が付くと補数表現を使用しません.(例:unsigned int, unsigned char)
注)表示したバイト数は32bitの一般的なシステムの場合.通常はシステムにより変化する.
long int (longと省略可) は通常は int の倍のバイト数があると思われがちですが,Linux では,int と同じ長さです.これらの長さは,システムによって変化します.長さを確かめるには次のようなプログラムを動かすと良いでしょう.
#include <stdio.h>
main()
{
printf("int = %d\n", sizeof(int));
printf("short int = %d\n", sizeof(short int));
printf("long int = %d\n", sizeof(long int ));
printf("char = %d\n", sizeof(char));
printf("float = %d\n", sizeof(float));
printf("double = %d\n", sizeof(double));
}
単純な配列を使用することも出来ます.
int a[3];
と宣言した場合は,a[0], a[1], a[2] の3つの変数を一度に宣言可能です.配列の要素の番号(添え字)が0から始まることに注意してください.C言語では,ポインタとの関係上,配列の要素の番号(添え字)が 0から始まることには大きな意味があります.
Javaなどのようにポインタが無い(と言われている)言語では 0から始まる必要性は特に考えられませんが,おそらく,C言語とのソースの互換・移植性の関係から 0から始まっています.Pascalという言語では,添え字の範囲を自由に設定することが可能です.
注意すべきは,C言語には「文字列型変数が無い」ということです.C言語では文字型変数の配列を使用して文字列変数を表します.例えば
char moji[5] = "abcd";
と宣言した場合(数字の5は省略可能),各要素の文字型変数には次のような文字が代入されます.最後に '\0' が代入されていることを確認してください.
moji[0] -> 'a'
moji[1] -> 'b'
moji[2] -> 'c'
moji[3] -> 'd'
moji[4] -> '\0'
mojiはただ単に文字型の配列ですので,
char moji[5] = "abcd";
とすることは可能でも(コンパイラが配列にデータをセットする),実行中に,
char moji[5];
moji = "abcd";
とすることは間違いです.moji = "abcd"; にはそれなりの意味があるので,コンパイルエラーにはなりませんが,普通は間違えて書く場合がほとんどです.