《C语言教程》02章 C语言的变量和数据类型


掌握变量的有效范围、基本数据类型是本章的内容。

一、基本数据类型

基本数据类型只有5种,另外加上布尔型、数组、结构类型、枚举类型等都是基本类型的一种变化。指针是一种地址操作, 必须和某一种数据类型相结合才有意义。自定义数据类型则是将以上类型进行组合变化后重新命名而已。

  1. char   字符型
  2. int    整型
  3. float   浮点型
  4. double  双精度浮点型
  5. 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以外数值全当作“真”处理。

二、变量定义

变量定义要注意以下几方面:

  1. 变量定义必须有一数据类型。
  2. 变量定义时可以赋初值,也可以不赋初值。
  3. 几个变量可以同时定义。
  4. 不同类型的变量赋值时,小类型的变量可以直接赋给大的,大类型的变量赋给小类型的变量时必须强制转换

.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语言的几点规则。

  1. 不能用纯数字命名,如“123”,“849”等。
  2. 不能有空格和运算符,如“new value”,“two+three”。
  3. 不能用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;
} 

注意:字符用单引号,而以后学的字符串是用双引号的。