目录
2.1 常量与变量
2.1.1 常量
不同进制的整型常量的表示形式
不同类型的整型常量的表示形式
实型常量的表示形式
不同类型的实型常量的表示形式
2.1.2 变量
变量的定义
关键字
案例演示
main 主函数
标识符命名规则
注意事项
初始化变量
注释
章节内容导读:
C 语言的数据类型和运算符很多,为了突出程序设计的主线,避免初学者一开始因接触较多的数据类型和运算符而陷入琐碎的语法细节之中,本章介绍整型和实型,对应 “C语言程序设计精髓” MOOC 课程的第 1 周视频,主要内容如下:
- 常量和变量,整型和实型
- 标识符命名,变量的定义和赋值
- 计算数据类型占用内存空间的大小
2.1 常量与变量
C 语言程序处理的数据有常量(Constant)和变量(Variable)两种形式。
2.1.1 常量
顾名思义,常量就是在程序中不能改变其值的量。按照类型划分有以下几种:整型常量、实型常量、字符型常量、字符串字面量(string literal)和枚举常量(枚举类型将在第 12 章 介绍)。一些关于常量的实例如表 2-1 所示。
不同进制的整型常量的表示形式
C 程序中的整型 (Integer) 常量通常习惯上用我们熟悉的十进制 (Decimal) 数来表示,但事实上它们都是以二进制形式存储在计算机内存中的。二进制数表示不直观方便,因此有时也将其表示为八进制 (Octal) 和十六进制 (Hexadecimal),编译器会自动将其转换为二进制形式存储。不同进制的整型常量的表示形式如表 2-2 所示。
提示:
关于四种进制的互相转换,我在这一篇博客中进行了详尽的阐述,可供参考。博客文章链接如下:进制的前缀表示与格式输出,进制之间的转换,原码、反码、补码的概念,补码的计算
不同类型的整型常量的表示形式
即使是整型常量也有长整型和短整型,有符号(signed,一般可省略)和无符号(unsigned)之分,不同类型的整型常量的表示形式如表 2-3 所示。
实型常量的表示形式
C 程序中的实型常量有十进制小数和指数两种表示形式,如表 2-4 所示。
不同类型的实型常量的表示形式
实型常量有单精度、双精度和长双精度之分,但无有符号和无符号之分,不同类型的实型常量的表示形式如表 2-5 所示。
2.1.2 变量
变量不同于常量,其值在程序执行过程中是可以改变的。在 C 程序中,变量在使用之前必须先定义。
变量的定义
定义变量的一般形式为:
类型关键字 变量名;
关键字
关键字 (Keyword) 是 C 语言预先规定的、具有特殊意义的单词(详见附录 A)。这里的类型关键字用于声明变量的类型。变量的类型决定了编译器为其分配内存单元的字节数,数据在内存单元中的存放形式,该类型变量合法的取值范围以及该类型变量可参与的运算种类。
案例演示
【例 2.1a】下面程序首先定义整型、实型和字符型三个变量,然后分别为其赋值。
int main(void)
{int a; // 用关键字 int 指定变量 a 的类型float b; // 用关键字 float 指定变量 b 的类型char c; // 用关键字 char 指定变量 c 的类型a = 1; // 为 int 型变量 a 赋值整型常量 1b = 2.5; // 为 float 型变量 b 赋值实型常量 2.5c = 'A'; // 为 char 型变量 c 赋值字符型常量 'A'return 0;
}
注意,C 程序是没有行号的。
main 主函数
用标准 C 语言编写的程序都是以 main() 作为开头的,它指定了 C 程序执行的起点,在 C 程序中只能出现一次。一个 C 程序必须有且只能有一个用 main 作为名字的函数,这个函数称为主函数。
main 后面圆括号内的 void 表示它没有函数参数(一般可省略),但是在第 11 章可能会有参数的哦。
main 前面的 int 表示函数执行后会返回操作系统一个整型值,在 main 函数的函数体中的最后一条语句使用 return 语句返回了这个值,通常返回 0 表示程序正常结束。关于函数的参数和返回值,在第 7 章会详细介绍。
C 程序总是从主函数开始执行,与它在程序中的位置无关。主函数中的语句 (Statement) 用花括号 { } 括起来。一般情况下,C 语句是以分号 ; 结尾的。
标识符命名规则
变量名是用户定义的标识符 (Identifier),用于标识内存中一个具体的存储单元,在这个存储单元中存放的数据称为变量的值。在计算机内存中,变量好比一个盒子,程序员负责为盒子命名。盒子中可以放入你想放进去的任何数据。当新的数据被放入盒子时,盒子即变量的旧值被新值所覆盖。
变量名的命名应遵守以下基本的命名规则 (Naming Rules):
- 标识符只能由英文字母、数字和下划线组成,建议使用见名知意的名字为变量命名,可以使用英文单词大小写混排或中间加下划线的方式,而不要使用汉语拼音;
- 标识符必须以字母或下划线开头(数字不能开头);
- 不允许使用 C 关键字为标识符命名;
- 标识符可以包含任意多个字符,但一般会有最大长度限制,与编译器相关,不过大多数情况下不会达到此限制。
注意事项
注意,标识符是区分大小写(即大小写敏感)的。例如,sum、Sum 和 SUM 是三个不同的标识符。为避免混淆,程序中最好不要出现仅靠大小写区分的相似的标识符。此外,C89 规定所有变量必须在第一条可执行语句之前定义,但 C99 没有这个限制。
在为变量赋值时,等号两边的空格不是必需的,增加空格只是为了增强程序的可读性 (Readability)。此外,main() 函数内的语句统一向后缩进了 4 个空格,这同样也是为了增强程序的可读性。这是一种良好的书写程序的习惯,它和编写正确的程序一样重要。
初始化变量
C 语言允许在定义变量的同时对变量初始化(为其赋初值)。例如,例 2.1a 可修改如下:
int main(void)
{int a = 1; // 用关键字 int 指定变量 a 的类型并初始化为 1float b = 2.5; // 用关键字 float 指定变量 b 的类型并初始化为 2.5char c = 'A'; // 用关键字 char 指定变量 c 的类型并初始化为 'A'return 0; // 返回值 0 表示程序正常结束
}
如果定义了一个变量但未对其进行初始化,那么该变量的值是一个随机数(静态变量和全局变量除外,将在第 7 章介绍)。养成在定义变量的同时为其初始化的习惯,有助于避免因忘记对变量赋初值导致的计算错误。
注释
注意,程序中以 // 开始到行末结束的内容是注释 (Comment)。本书程序的注释采用了 C++ 风格的注释,如果需要跨行书写,则每一行都必须以 // 开始。也可以采用 C 风格的注释,即将跨行书写的内容放到 /* 和 */ 之间。
C 编译器在编译程序时完全忽略注释,不对注释内容进行语法检查,所以既可以用英文,也可以用中文来书写注释内容。虽然有无注释并不影响程序的功能和正确性,但注释是对程序功能的必要说明和解释,给程序添加必要的注释能起到 “提示” 代码的作用,可使程序更容易阅读。
在一条语句中,可同时定义多个相同类型的变量,多个变量之间用逗号作分隔符 (Separator),其书写的先后顺序无关紧要。例如,可以按如下方式定义三个整型变量:
int a, b, c;
若要在定义变量的同时将其初始化为 0,则为:
int a = 0, b = 0, c = 0;
但是不能写成:
int a = b = c = 0;
虽然在一条语句中同时定义多个变量的形式很简洁,但不适用于需要对每个变量表示的意义单独进行注释的场合,因为这样会影响注释的清晰性。