掌握变量的有效范围、基本数据类型是本章的内容。
基本数据类型只有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>int
main(void
) {unsigned char
u_char = 109; //定义并初始化char
charC; //只定义不赋值double
doubleX=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);return
0; }
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>int
main(void
) {char
ch1 = 109;__int8
x1 = 109;char
ch2 = 'm';unsigned int
x2 = '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); //整型方式输出return
0; }
注意:字符用单引号,而以后学的字符串是用双引号的。