【C语言】(二)变量与常量
一、变量
- 计算机存储器中的一块命名空间,可以在里面存储一个值(Value)
- 存储的值是可以随时变的
(一) 变量的命名(标识符)规则
- 只能包含 字母(Aa~Zz)、数字(0-9)、下划线(_) 简洁有意义
- 只能字母和下划线开头
- 大小写敏感:C语言区分大小写,字母大写和小写是不同的变量名
- 避免使用保留字:不能使用C语言的关键字和保留字作为变量名

(二)变量的定义/声明
变量使用之前必须先声明变量,只有一次
int main() {
int a;
int b,c; //定义变量
}
(三)变量的赋值
变量使用之前一定要赋值
变量使用“=”赋值,等号左侧为左值,等号右侧为右值
int main(){
int a,b;
char ch;
a=3,b=4;
ch= 'c';
}
int main(){
int a = 3,b =4;
char ch ='c'; //初始化
double d = 3.14, e = 2.58; //定义变量并初始化
ch = 'd'; //赋值:变量已存在(对应空间已开辟),将字符d直接放到一个已经存在的空间中
}
二、变量的数据类型
变量的类型决定了什么?
地址:每个变量都分配了一个内存地址
- 使用&(地址运算符)获取变量的内存地址
- 通过指针访问和操作变量的内存地址
32位机的内存地址是32位,从0x00000000到0xFFFFFFFF
编译器按照变量定义的类型分配相应大小的内存空间
三、变量的属性
(一)占用内存空间的大小
(二)数据的解释方式
如:unsigned类型 VS 有符号类型;整数型VS 浮点数;字符型 VS 整型
(三)不同数据类型的表示范围
与解释方式和长度有关
char ——> 1字节 ——>8位——> 有1个符号位
unsigned char ——> 1字节 ——>8位——>没有符号位
(四)可参与的运算
整型 :加减乘除余
浮点型:加减乘除
字符型:加减 (ASCII码)
四、C语言 运算符优先级
运算符分为单目(一元),双目(二元)和三目(三元)。顾名思义,目,即运算符操作数的个数
类型 | 说明 | 举例 |
---|---|---|
单目 | 操作数只有一个,从右向左 | a++(a自增1) |
双目 | 操作数有两个,从左向右 | a + b(两数之和) |
三目 | 目前仅有条件运算符 | a ? b : c(如果a为真,结果为b,否则为c |
优先级 | 运算符 | 名称或含义 | 使用形式 | 说明 | 方向 |
1 | [] | 数组下标 | 数组名[常量表达式] | ---- | 左到右 |
() | 圆括号 | (表达式) | |||
函数名(形参表) | |||||
. | 成员选择(对象) | 对象.成员名 | |||
-> | 成员选择(指针) | 对象指针->成员名 | |||
2 | - | 负号运算符 | -表达式 | 单目 | 右到左 |
(类型) | 强制类型转换 | (数据类型)表达式 | |||
++ | 自增运算符 | ++变量名 | 单目 | ||
变量名++ | |||||
-- | 自减运算符 | --变量名 | |||
变量名-- | |||||
* | 取值运算符 | *指针变量 | |||
& | 取地址运算符 | &变量名 | |||
! | 逻辑非运算符 | !表达式 | |||
~ | 按位取反运算符 | ~表达式 | |||
sizeof | 长度运算符 | sizeof(表达式) | |||
3 | / | 除 | 表达式 / 表达式 | 双目 | 左到右 |
* | 乘 | 表达式*表达式 | |||
% | 余数(取模) | 整型表达式%整型表达式 | |||
4 | + | 加 | 表达式+表达式 | ||
- | 减 | 表达式-表达式 | |||
5 | << | 左移 | 变量<<表达式 | ||
>> | 右移 | 变量>>表达式 | |||
6 | > | 大于 | 表达式>表达式 | ||
>= | 大于等于 | 表达式>=表达式 | |||
< | 小于 | 表达式<表达式 | |||
<= | 小于等于 | 表达式<=表达式 | |||
7 | == | 等于 | 表达式==表达式 | ||
!= | 不等于 | 表达式!= 表达式 | |||
8 | & | 按位与 | 表达式&表达式 | ||
9 | ^ | 按位异或 | 表达式^表达式 | ||
10 | | | 按位或 | 表达式|表达式 | ||
11 | && | 逻辑与 | 表达式&&表达式 | ||
12 | || | 逻辑或 | 表达式||表达式 | ||
13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 三目 | 右到左 |
14 | = | 赋值运算符 | 变量=表达式 | --------- | 右到左 |
/= | 除后赋值 | 变量/=表达式 | |||
*= | 乘后赋值 | 变量*=表达式 | |||
%= | 取模后赋值 | 变量%=表达式 | |||
+= | 加后赋值 | 变量+=表达式 | |||
-= | 减后赋值 | 变量-=表达式 | |||
<<= | 左移后赋值 | 变量<<=表达式 | |||
>>= | 右移后赋值 | 变量>>=表达式 | |||
&= | 按位与后赋值 | 变量&=表达式 | |||
^= | 按位异或后赋值 | 变量^=表达式 | |||
|= | 按位或后赋值 | 变量|=表达式 | |||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 |
(一)sizeof运算符
sizeof(类型):类型占用的内存字节数
sizeof(变量或表达式):变量或表达式所属类型所占的内存字节数
- 增加程序的可执行性
- 编译时执行的运算符,不会导致额外的运行时间开销
五、字节存储顺序
主要分为大端序
(Big-endian)和小端序
(Little-endian),区别如下
类型 | 解释 | 备注 |
---|---|---|
Big-endian | 高位字节存入低地址,低位字节存入高地址 | 与从左到右的书写顺序相同,便于处理字符串 |
Little-endian | 低位字节存入低地址,高位字节存入高地址 | 便于计算机从低位字节向高位字节运算 |
六、常量
程序运行过程中值不能改变的数据
- 用于表示固定值,如数字、字符或字符串
- 常量使用提高程序的可读性和可维护性,避免不必要的错误
两种替换直接书写数值的方法
(一)宏常量
- 使用标识符,在使用前需要先定义
- 慎用符号(考虑要不要分号)
- 预编译阶段发生替换:处理“程序中的编译预处理命令” 的结果 + 源程序 ——>编译得到目标代码
定义方法:#define 标识符 字符串
缺点:
- 没有数据类型,编译器在进行宏替换时不进行类型检查
- 只进行简单的字符串替换,极易产生意想不到的缺点
(二)const常量
- 有数据类型,进行类型检查
- 某些集成化调试工具可以对其进行调试