データ型とは、データの種類である。データ型と使用するメモリ量は関係が深い。
たとえば、char は、「文字」のデータ型で、1バイトである。short int は、「整数」のデータ型であり、2バイトである。int は、「整数」のデータ型であり、大きさは処理系依存である。通常、32ビット計算機で32ビット対応のOS上では、4 バイトである。
データ型の大きさは、
変数は、プログラムの上で、データを特定するための記述である。
プログラム上で変数を使うとき、データ型を指定しなければならない。この指定をすることを「変数宣言」という。
プログラム上で変数宣言をする場所に依存するが、変数宣言により、計算機のメモリ上に、使用可能なメモリが準備される。その大きさは、変数のデータ型に対応している。
ポインタは、変数のために準備されたメモリのアドレスである。
int 型のデータ構造に対するアドレスを扱う変数は、int のポインタ変数という。
整数の変数として、
配列は、同一のデータ型のデータの並びである。
配列の構造をした変数の宣言は、2通りある。
プログラムを作成する段階で、配列の大きさを決めておく(固定する)ならば(方法1)を使う。プログラムの実行時に配列の大きさを決めておくならば(方法2)を使う。
どちらの方法で宣言しても、変数 s の使い方は同じである。
文字列は、文字型 char の配列である。
文字列は文字の連続であるが、「\0」が終端文字である。
改行も文字であり、「\n」が改行文字である。
プログラム上で、'a' と書くと、それは文字型である。
プログラム上で、"abc" と書くと、それは文字列であり、'a','b','c','\0' という4つの char 型のデータの並びである。
文字列の長さを測る関数は、
"abc" を格納するには、大きさ4の配列が必要である。\0 を格納するためである。
キーボードから abc を入力し、 文字列のコピーをする関数は、 複数の変数を束ねたものが、構造体である。
メンバ変数へのアクセス方法はドット記法と矢印記法がある。ドット記法は、構造体を表す変数のメンバ変数をアクセスする際使用する。矢印記法は、構造体へのポインタ変数のメンバ変数をアクセスする際使用する。
データ型を新しく定義するために、 1つめは、「Seisuu」というデータ型の定義であり、具体的には int 型である。2つめは、「RGB」というデータ型の定義であり、具体的には、大きさ 3 の int の配列である。3つめは、「NameCard」というデータ型の定義であり、具体的には、長さ10の文字の配列の変数 name と int 型の変数 age で構成される構造体である。
変数宣言をするときは、typedef で定義したデータ型の名前を使うことができる。
構造体
struct {
char name[10];
int age;
}
main()
{
struct {
char name[10];
int age;
} n, *p:
strcpy(n.name,"abc");
n.age = 20;
p = &n;
printf("%s\n",p->name);
printf("%d\n",p->age);
}
データ型の定義
typedef int Seisuu;
typedef int RGB[3];
typedef struct { char name[10]; int age } NameCard;
main()
{
Seisuu a;
RGB c1, c2;
NameCard n;
NameCard *p;
a = 1;
c1[0] = 0; c1[1] = 0; c1[2] = 3;
strcpy(n.name, "abc");
p = (NameCard *)malloc(sizeof(NameCard));
strcpy(p->name, "abc");
}