C语言中数据类型可分为基本类型,结构体类型,指针类型和空类型:
1数据类型:
1基本类型:
1.1字符型(本质上也是一种整型变量):
char : 1字节 -128~127
unsigned char : 1字节 0~255
由于字符是按其代码(整数)形式存储的,因此C99把字符型数据作为整型的一种。
1.1.1字符与字符代码:
字符集(包括ASCII字符集):字母,数字,专门符号,不能显示的字符(如空'\0',回车'\r')
注意 字符‘1’,整数字符1是不同的:'1'实际上表示以1的SACII码值(49)存储的二进制数,而1就是整数1的二进制数存储的。
1.1.2字符变量(用char定义的变量):
如:char buf=‘?’;表示将?的ASCII码值(63)赋给变量buf。
在输出时字符变量的值时,可以选择以十进制整型输出或以字符型输出。
当用printf("%d,%c\n",buf,buf);打印时输出,63和?。
1.2整型(不同的编译器字节大小不同:如TuboC2.0编译器中int是2字节,现如今int型基本上都是4字节):
类型 | 符号 | 长度(字节) | 取值范围 |
整型 | int | 2 | -32768~32768(即-2^15-2^15-1) |
4 | -2^31~2^31-1 | ||
长整型 | long int或long | 4 | -2^31~2^31-1 |
双长整型 | long long(int) | 8 | -2^63~2^63-1 |
无符号双长整型 | unsigned long long(int) | 8 | 0~2^64-1 |
短整型 | short int或short | 2 | -2^15~2^15-1 |
无符号整型 | unsigned int | 2 | 0~2^16-1 |
4 | 0~2^32-1 | ||
无符号长整型 | unsigned long int 或unsigned long | 4 | 0~2^32-1 |
无符号短整型 | unsigned short int或unsigned short | 2 | 0~2^16-1 |
1.2实型(浮点型)
类型 | 字节数 | 有效数据位(小数点后) | 数值范围(绝对值) |
float(单精度) | 4 | 6 | 0以及1.2*10^-38~3.4*10^38 |
double(双精度) | 8 | 15 | 0以及2.3*10^-308~1.7*10^308 |
long double(和编译器有关,不过一般是16字节) | 8 | 15 | 0以及2.3*10^-308~1.7*10^308 |
16 | 19 | 0以及3.4*10^-4932~1.1*10^4932 |
1.3枚举型
通过预定义列出所有值的标识符来定义一个有序集合,这些值的次序和枚举类型说明中的标识符的次序是一致的。枚举类型的形式:(标识符1,……,标识符n)
例如: type daystype=(sunday,monday,tuesday,wednesday,thursday,friday,saturday)
枚举元素只能是标识符,而不能是数值常量或字符常量。例如以下的定义是错误的:
type daystype=('sun','mon','tue','wed','thu','fri','sat')
枚举元素是标识符,不要把作为枚举元素的标识符视作变量名,它不能被赋值。同一个枚举元素不能出现在两个或两个以上的枚举类型定义中。例如以下的定义是错误的:
type daytype1=(monday,tuesday);
daytype2=(monday,wednesday);
可以将枚举类型的定义和变量的定义结合在一起。例如:var a:(monday,tuesday,sunday)
枚举类型属于顺序类型。根据定义类型时各枚举元素的排列顺序确定它们的序列,序列号从0开始
例如:已经定义daystype
ord(sunday)=0,succ(sunday)=monday,pred(friday)=thursday
但是枚举类型中的第一个元素没有前趋,最后一个元素没有后继。Turbo Pascal不允许直接读写枚举值,所以枚举值的输出常用case语句间接的输出。枚举值的输入,则要一一判断读入字符是否是枚举类型的标识符。若是才能赋给枚举变量,否则就会出错。
例如:枚举值的输出
case day of
sunday:write('sunday');
monday:write('monday');
tuesday:write('tuesday');
wednesday:write('wednesday');
thursday:write('thursday');
friday:write('friday');
saturday:write('saturday');
end;
以上是个人学习总结,有错误或不足之处还请指出!