C 变量和常量
1. 基本概念
变量和常量是程序处理的两种基本数据对象。变量与常量相当于数据的可读可写与只读。
- 常量是数据的一种保护机制,在内存分配给程序的内存块中有专门的常量(只读)存储区。
- 变量的意义是确定目标并提供存放的空间。
2. C 变量
2.1 C 语言变量名规范
- C语言变量名只能是英文字母(A-Z, a-z)和数字(0-9)或者下划线(_)组成。
- 必须是英文字母或者下划线开头,不能是数字开头。
- 变量名区分大小写。传统命名习惯中,用小写字母命名变量,大写字母表示符号常量名。
- 不能使用关键字命名。
2.2 C 语言中的变量定义和变量声明
extern int a; // 声明一个全局变量 a,不是定义
int a; // 声明并定义一个全局变量 a
extern int a =0; // 声明并初始化 a (给变量初值一定是定义)
int a =0; // 定义并初始化 a
- 定义也是声明,extern 声明不是定义。
- 变量只能定义一次,而声明却可以多次。
- 定义会分配存储空间,而声明不会。
2.3 C 语言中的左值(Lvalues)和右值(Rvalues)
C 中有两种类型的表达式:
-
**左值 (lvalue):**指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。
-
**右值(rvalue):**术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值
可以出现在赋值号的右边,但不能出现在赋值号的左边。
变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。下面是一个有效的语句:
int g = 20;
但是下面这个就不是一个有效的语句,会生成编译时错误:
10 = 20;
2.4 const关键字
- 修饰一个变量为只读
const int var = 5; //const声明常量必须要在一个语句中完成
3. C 常量
3.1 整数常量
-
整数常量可以是十六进制、十进制、八进制、二进制。
-
前缀:0X或0x表示十六进制,0表示八进制,不带前缀默认为十进制。
-
整数常量也可以带后缀:U表示无符号整数,L表示长整数。大小写、顺序任意
12 /* 合法的 */
215u /* 合法的 */
0xFeeL /* 合法的 */
078 /* 非法的:8 不是八进制的数字 */
032UU /* 非法的:不能重复后缀 */
85 /* 十进制 */
0213 /* 八进制 */
0x4b /* 十六进制 */
30 /* 整数 */
30u /* 无符号整数 */
30l /* 长整数 */
30ul /* 无符号长整数 *
3.2 浮点常量
- 浮点数由整数部分、小数点、小数部分组成。可以使用小数或者指数表示浮点常量。
- 小数形式:必须包含整数部分、小数部分,或同时包含两者。
- 指数形式:必须包含小数点、指数,或同时包含两者。
3.14159 /* 合法的 */
314159E-5L /* 合法的 */
510E /* 非法的:不完整的指数 */
210f /* 非法的:没有小数或指数 */
.e55 /* 非法的:缺少整数或分数 */
3.3 字符常量
- 字符本质上就是一个单字节的整型。
- 字符常量是括在单引号中。
- 普通字符:’L‘,’o‘,’v‘,’e‘。
- 转义字符:’\n‘,’\t‘,’\a‘。
3.4 转义字符
转义字符 | 含义 |
---|---|
\a | 响铃(BEL) |
\b | 退格(BS),将当前位置移到前一列 |
\f | 换页(FF),将当前位置移到下页开头 |
\n | 换行(LF),将当前位置移到下一行开头 |
\r | 回车(CR),将当前位置移到本行开头 |
\t | 水平制表(HT),跳到下一个TAB的位置 |
\v | 垂直制表(VT) |
\\ | 表示反斜杠本身( \ ) |
\‘ | 表示单引号( ‘ ) |
\" | 表示双引号( ” ) |
? | 表示问号( ?) |
\0 | 表示空字符(NULL) |
\ddd | 1到3位八进制数所代表的任意字符 |
\xhh | 1到2位十六进制所代表的任意字符 |
3.5 常量的定义
在 C 语言中,有简单的定义常量的方式:
- 使用 #define 预处理器
#define 预处理器
使用之前必须先定义:#define 标识符 常量
#define TIME (365*24*60*60)