1. 变量的定义
变量定义的基本语法为:
数据类型 变量名;
-
数据类型:决定变量可以存储的数据类型,如
int
(整型)、float
(单精度浮点型)、double
(双精度浮点型)、char
(字符型)等。 -
变量名:由用户自定义,必须遵循标识符的命名规则。
示例:
int age;
float height;
char grade;
2. 变量命名规则
变量名是变量的标识符,必须遵循以下规则:
-
以字母或下划线开头:变量名的第一个字符是必须字母(A-Z或a-z)或下划线(_),不能以数字开头。
-
正确示例:
int a = 1;
、int _num = 2;
-
错误示例:
int 1var = 3;
(以数字开头)
-
-
只能包含字母、数字和下划线:变量名中不能包含空格、标点符号或其他特殊字符。
-
正确示例:
int myVar = 10;
-
错误示例:
int my-var = 20;
(包含-
)
-
-
区分大小写:C语言是区分大小写的语言,因此
Var
和var
是两个不同的变量。-
示例:
int Var = 1;0
和int var = 20;
是两个不同的变量。
-
-
不能使用C语言的关键字:变量名不能与C语言的关键字(如
int
、float
、if
、while
等)相同。-
错误示例:
int int = 10;
(int
是关键字)
-
3. 变量定义规则
-
必须指定数据类型:每个变量在定义时必须明确指定其数据类型(如
int
、float
、char
等)。-
示例:
int age;
、float price;
、char grade;
-
-
可以在同一行定义多个变量:如果多个变量的数据类型相同,可以在同一行定义。
-
示例:
int a = 1, b = 2, c = 3;
-
-
变量名必须唯一:在同一作用域内,不能定义两个同名的变量。
-
错误示例:
-
int x = 10; int x = 20; // 错误:重复定义
-
4. 变量初始化规则
-
变量可以在定义时初始化:在定义变量时,可以为其赋一个初始值。
-
示例:
int count = 0;
、float price = 19.99;
-
-
未初始化的变量可能包含垃圾值:如果变量未初始化,其值是不确定的(可能是内存中的随机值)。
-
示例:
int num; // 未初始化,num的值是不确定的 printf("%d\n", num); // 输出结果可能是任意值
-
5.变量的作用域规则
变量的作用域决定了变量在程序中的可见性范围:
-
全局变量:定义在所有函数之外,作用域为整个程序。
-
示例:
int globalVar = 10; void func1() { printf("%d\n", globalVar); // 可以访问 }
-
-
局部变量:定义在函数或代码块内,作用域为所在的代码块。
-
示例:
void func() { int localVar = 20; // 局部变量 printf("%d\n", localVar); // 可以访问 }
-
注意:局部变量在代码块外不可见。
-
-
嵌套作用域:如果局部变量与全局变量同名,则局部变量会隐藏全局变量。
-
示例:
int globalVar = 10; void func() { int globalVar = 20; // 局部变量 printf("%d\n", globalVar); // 输出20 }
-
6. 变量的存储类型规则
C语言支持不同的存储类型,每种存储类型有其特定的规则:
-
自动存储类型(
auto
)-
默认存储类型。
-
生命周期:从定义到函数结束。
-
作用域:所在代码块。
-
示例:
auto int x = 10;
(auto
关键字可省略)
-
-
静态存储类型(
static
)-
生命周期:整个程序运行期间。
-
作用域:所在代码块。
-
示例:
static int count = 0;
-
-
外部存储类型(
extern
)-
生命周期:整个程序运行期间。
-
作用域:整个程序。
-
用于在多个文件中共享变量。
-
示例:
// 文件1.c int globalVar = 10; // 文件2.c extern int globalVar;
-
-
寄存器存储类型(
register
)-
建议将变量存储在CPU寄存器中,以提高访问速度。
-
生命周期:从定义到函数结束。
-
作用域:所在代码块。
-
示例:
register int loopVar;
-
7. 变量的类型转换规则
-
隐式类型转换:由编译器自动完成,通常从低精度类型转换为高精度类型。
-
示例:
int a = 10; float b = a; // 自动将int转换为float
-
-
显式类型转换(强制类型转换):通过类型转换运算符完成,可能丢失精度。
-
示例:
float f = 10.5; int i = (int)f; // 强制将float转换为int,结果为10
-
8. 变量的地址规则
-
每个变量都有一个唯一的内存地址,可以通过
&
运算符获取。-
示例:
int num = 10; printf("Address of num: %p\n", &num);
-
-
不同变量的地址不同,即使是同名的局部变量。
9. 变量的修饰符规则
-
const
修饰符-
定义用于常量变量,值不能被修改。
-
示例:
const int MAX = 100;
-
-
volatile
修饰符-
用于修饰可能被外部修改的变量,如硬件寄存器。
-
示例:
volatile int status;
-