Skip to main content

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 中有两种类型的表达式:

  1. **左值(lvalue):**指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。

  2. **右值(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)
\ddd1到3位八进制数所代表的任意字符
\xhh1到2位十六进制所代表的任意字符

3.5 常量的定义

在 C 语言中,有简单的定义常量的方式:

  • 使用 #define 预处理器

#define 预处理器

使用之前必须先定义:#define 标识符 常量

#define TIME (365*24*60*60)