他の基本データ型の場合


基本データ型には色々あります。 まずは、int に対して符合なし整数 unsigned int が存在します。 それから、整数だとchar, short, longがあり、一方、浮動小数点については float, doubleなどがあります。それぞれ、どれだけの大きさを占めるデータかというと、 sizeof(XXXX)をつかって調べてください。現在は、だいたいこんな感じ。
int main(int argc, char** argv) {
    printf("sizeof(char): %d, sizeof(short): %d, sizeof(int): %d, sizeof(long) : %d, 
sizeof(float): %d, sizeof(double): %d, sizeof(char*): %d, sizeof(int*): %d\n",
	   sizeof(char), sizeof(short), sizeof(int), sizeof(long), 
	   sizeof(float), sizeof(double), sizeof(char*), sizeof(int*));
    return 0;
}
/*  実行結果:
    kamada@cygwin% ./data_B.exe
    sizeof(char): 1, sizeof(short): 2, sizeof(int): 4, sizeof(long) : 4,
    sizeof(float): 4, sizeof(double): 8, sizeof(char*): 4, sizeof(int*): 4
 */
注意しておきますと、char*, int* はともに 4byte= 32bit になっています。 というのも、これらはポインタでアドレスを扱うには 32bit 必要だからです。 これは、64bit address 空間を使う OS などでは、値が変わってくることでしょう。

あとは、好きなものを使ってください。 整数や浮動小数点を使いたいときは、自分の使いたい精度に合わせたデータを使ってくれればOKです。 あとは、処理系が内部で適当にやってくれます。 例えば、double のサイズは 8byte なので、ポインタ演算の際の "+ 1" の意味も内部では変わってきます。 でも、皆さんが気にする必要はありません。 詳しく知りたい場合は、例えば、intの場合のプログラムを double に変えて試してみてください。


文字列についても触れておきましょう。 C においては、文字列というのは char (1byte=8bit)データの配列で、最後が '\0'文字で終わるものです。 ただの char の配列(charへのpointer)ということだと、サイズの情報が載っていません。 これだけでは、例えば printf 君は、 渡されたpointerからどこまでのエリアを文字列と見なすべきか分からないわけです。 というわけで、最後にかならず'\0'を入れておく約束になっているわけです。

2001.11.12/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp