掌握变量的有效范围、基本数据类型是本章的内容。
基本数据类型只有5种,另外加上布尔型、数组、结构类型、枚举类型等都是基本类型的一种变化。指针是一种地址操作, 必须和某一种数据类型相结合才有意义。自定义数据类型则是将以上类型进行组合变化后重新命名而已。
不同的C语言版本都扩充了许多自己的类型,这些全是基本类型的变化(主要是数据范围的变化),扩充的修饰符有2组(short和long,signed和unsigned)。下面列出VC的基本类型及部分扩充类型,以供参考:
| 类型名称 | 字节数 | 其它称呼 | 值的范围 |
|---|---|---|---|
| int | * | signed, signed int |
根据操作系统而定 |
| unsigned int | * | unsigned | 根据操作系统而定 |
| __int8 | 1 | char, signed char |
-128 to 127 |
| __int16 | 2 | short, short int, signed short int |
-32,768 to 32,767 |
| __int32 | 4 | signed, signed int |
-2,147,483,648 to 2,147,483,647 |
| __int64 | 8 | none | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
| char | 1 | signed char | -128 to 127 |
| unsigned char | 1 | none | 0 to 255 |
| short | 2 | short int, signed short int |
-32,768 to 32,767 |
| unsigned short | 2 | unsigned short int | 0 to 65,535 |
| long | 4 | long int, signed long int |
-2,147,483,648 to 2,147,483,647 |
| unsigned long | 4 | unsigned long int | 0 to 4,294,967,295 |
| enum | * | none | 与int相同 |
| float | 4 | none | 3.4E +/- 38 (7 digits) |
| double | 8 | none | 1.7E +/- 308 (15 digits) |
| long double | 10 | none | 1.2E +/- 4932 (19 digits) |
标准ANSI C中没有布尔型,只有布尔表达式,但不同的C语言版本有可能扩充。布尔型只有2个值“真”、“假”,数值0表示“假”,0以外数值全当作“真”处理。
变量定义要注意以下几方面:
.NET的编译器做了许多防错处理,使得不强制转换也不出问题。大家仍不可忘记类型转换,否则将来程序移植时会带来许多麻烦。
![]()
#include<stdio.h>intmain(void) {unsigned charu_char = 109; //定义并初始化charcharC; //只定义不赋值doubledoubleX=200, doubleY; //2变量同时定义 charC = u_char; //类型的范围相同,无须强制转换 printf("u_char=%c\n", u_char); printf("charC=%c\n", charC); printf("u_char=%d\n", u_char); printf("charC=%d\n", charC); doubleY = charC; //小类型->大类型 charC = (char)doubleX; //大类型->小类型 printf("doubleY=%e\n", doubleY); printf("charC=%d\n", charC);return0; }
C语言的变量命名是很自由的,不同的系统有各自的规则,如UNIX主张用小写并用下划线分割意思(例:new_value)。Windows主张大小写混写(例:NewValue)。 中国主张尽可能用英文,而日本更喜欢用汉字的读音。甚至不同企业的命名规则也不一样,但不管什么风格,都必须遵守C语言的几点规则。
| auto | double | int | struct |
| break | else | long | switch |
| case | enum | register | typedef |
| char | extern | return | union |
| const | float | short | unsigned |
| continue | for | signed | void |
| default | goto | sizeof | volatile |
| do | if | static | while |
char型和unsigned int是同一类型,字符其实就是无符号整型,因此下面几种写法实际上是一样的。
![]()
#include<stdio.h>intmain(void) {charch1 = 109;__int8x1 = 109;charch2 = 'm';unsigned intx2 = 'm'; printf("ch1=%c\n", ch1); //字符方式输出 printf("ch1=%d\n", ch1); //整型方式输出 printf("x1=%c\n", x1); //字符方式输出 printf("x1=%d\n", x1); //整型方式输出 printf("ch2=%c\n", ch2); //字符方式输出 printf("ch2=%d\n", ch2); //整型方式输出 printf("x2=%c\n", x2); //字符方式输出 printf("x2=%d\n", x2); //整型方式输出return0; }
注意:字符用单引号,而以后学的字符串是用双引号的。