掌握变量的有效范围、基本数据类型是本章的内容。
一、基本数据类型
基本数据类型只有5种,另外加上布尔型、数组、结构类型、枚举类型等都是基本类型的一种变化。指针是一种地址操作, 必须和某一种数据类型相结合才有意义。自定义数据类型则是将以上类型进行组合变化后重新命名而已。
- char 字符型
- int 整型
- float 浮点型
- double 双精度浮点型
- void 无类型
不同的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语言的几点规则。
- 不能用纯数字命名,如“123”,“849”等。
- 不能有空格和运算符,如“new value”,“two+three”。
- 不能用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;
}
注意:字符用单引号,而以后学的字符串是用双引号的。
|