C语言是一种通用的程序设计语言,目前常用来编写系统软件以及进行嵌入式应用开发。C语言程序是由一系列函数组成的,这种结构便于将大型程序划分为若干相对独立的模块并分别实现,程序运行时通过函数调用来完成功能要求。一个C程序必须有一个main函数,整个程序的执行从该函数开始。在C程序中,数据都具有类型,通过数据类型定义了数值范围以及可进行的运算。
C的数据类型可分为基本数据类型(内置的类型)和复合数据类型(用户定义的类型)。内置的类型是指C语言直接规定的类型,用户定义的类型在使用以前必须先定义,枚举、结构体和共用体类型都是用户定义类型。
1、基本数据类型:C的基本数据类型有字符型(char)、整型(int)、浮点型(float、 double),void类型也是一种基本类型,void不对应具体的值,而是用于一些特定的场合。例如,用于定义函数的参数类型、返回值、函数中指针类型等进行声明,表示没有或暂未确定类型。
2、复合数据类型
(1)枚举类型:是一种用户定义的数据类型,就是把这种类型数据可取的值逐一列举出来。其一般定义形式为:
enum 枚举类型名
{
标识符[=整型常数],
标识符[=整型常数],
…
标识符[=整型常数]
};
其中,“ 枚举类型名”右边花括号中的内容称为枚举表,枚举表中的每一项称为枚举成员, 枚举成员是常量。枚举成员之间用逗号隔开,方括号中的“整型常数”是枚举成员的初值。
如果没有为枚举成员赋初值,即省掉了标识符后的“=整型常数”时,编译系统为每一个枚举成员赋予一个不同的整型值,第一个成员为0,第二个成员为1, 依此类推。当枚举类型中的某个成员赋值后,其后的成员则按依次加1的规则确定其值。例如:
enum Color {e1=1, e2, e3, e4=30, e5=100, e6};
此时,e2=2,e3 =3, e6 =101。
(2)结构体类型:利用结构体类型可以把一个数据元素的各个不同的数据项聚合为一个整体。一个结构体变量的存储空间长度等于其所有成员所占空间长度之和。结构体类型的声明格式为:
struct 结构体名 {
成员表列;
}变量名表列;
例如,一个复数z=x+yi包含了实部x和虚部y两部分,可以定义一个表示复数的结构体类型,并用typedef为结构体类型命名为Complex:
typedef struct Complex {
double re;
double im;
}Complex;
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间。
在该定义中,Complex 是这个结构体类型的名字,re 和im是结构的成员。一般情况下,对结构体变量的运算必须通过对其成员变量进行运算来完成,可以通过成员运算符“.”来访问结构体变量的成员,方式为:结构体变量名.成员名。
例如,定义结构体变量z,将-1和2分别赋值给一个复数z的实部成员变量和虚部成员变量:
Complex z;
z.re=-1;
z.im= 2;
z.re和z.im相当于普通的double型变量。结构体外的变量名和结构体中的成员名相同时不会发生冲突。
(3)共用体类型:又叫做联合数据类型,一个共用体变量的存储空间的大小等于其占用空间最大的成员的大小,所有成员变量占用同一段内存空间。类型的声明格式为:
union 共用体名 {
成员表列;
}变量名表列;
例如,定义共用体类型DATA及其变量a:
typedef union DATA{
int i;
char ch;
}DATA;
DATA a;
不能直接引用联合类型的变量,只能引用其成员。用“.”运算符引用共用体变量的成员,引用方式为:共用体变量.成员变量名,例如,a.i, a.ch。