5. 变量
变量是 C 语言程序中用于存储数据的基本单元,它是内存中的一段连续的内存,其内存中的值可以在程序运行期间被修改。
变量通常有自己的名字,变量名是内存位置的标识符,通过这个名字可以访问这段内存。
C 语言中每个变量有特定的 数据类型,决定了它能存储的数据种类(如整数、小数等)和占用内存的大小。
变量的声明和初始化
变量必须先声明再使用。声明是告诉编译器,在程序运行到此处是要申请多大的内存空间用来保存何种类型的数据。
变量声明的语法:
数据类型 变量名1 [= 变量的初始值1],变量名2 [= 变量的初始值2];
[]表示其中的内容可以省略
声明:
本教程写语法的规则是:中文的部分需要使用对应的内容替换,英文部分和符号部分如果不加特殊说明,则是语法中必须书写的关键字和符号。
语法说明:
- 变量的声明必须以类型开始,以英文的分号(
;)结束。 - 变量可以在声明时直接给出初始值,也可以在后续使用中通过赋值表达式给出新值。
- 变量在声明时没有给出初始值,则变量的初始值不确定(不一定是零,可能是任何数值)。
示例:
#include <stdio.h>
int main(int argc, char *argv[]) {
int age; // 声明一个整型变量,初始值不确定。
float price = 0.0; // 声明一个浮点型变量,初始值为0.0
int score1, score2 = 60; // 声明两个整型变量
char gender = 'F'; // 声明一个字符型变量,初始值为'F'(值为70)。
// 字符 'F' 后续讲解。
printf("age:%d, price:%f, score1:%d, score2:%d, gender:%d\n",
age, price, score1, score2, gender
);
return 0;
}
运行结果
age:2113775720, price:0.000000, score1:32765, score2:6, gender:70
其中变量
age、score1没有给出初始值,因此它的值充满不确定性。
上述程序中 printf 函数是为了打印各个变量的值,具体内容我们后续章节再解释。
上述程序中 age、price、score1、score2、gender 都是变量名。
C 语言的变量名不能随意书写,它有自己的命名规则,称之为:标识符(Identifier)。
标识符
标识符 用于在程序中自定义的名称,如:变量名(variable)、函数名(function)、数组名(array)等。
C 语言的标识符的命名规则
- 第一个字母必须是 英文字母
A-Z、a-z或下划线(_)。 - 第二个字母起(如果有)则必须是 英文字母
A-Z或、a-z、下划线或数字0-9。 - 不能使用 C 的 关键字(keywords),如 int、long、return等。
- C 语言的标识符区分大小写,即:
laowei和LaoWei是两个不同的变量名。 - C89/C90标准规定编译器要至少支持
31个字符以上作为标识符。 - C99及以后标准规定编译器要至少支持
63个字符以上作为标识符。
合法的标识符示例
laowei wei_ming_ze ei123 a1b2c3
_abc a1 x y
不合法的标识符示例:
1a $a
常用的标识符的命名方法:
- 使用英文单词的名词等作为变量名(建议使用),也可是使用汉语拼音作为变量名。
- 当有多个英文组合时使用小写加下划线。如:
student_name_age。 - 当有多个英文组合时使用大驼峰命名法,每个单词首字母大写。如:
StudentNameAge。 - 当有多个英文组合时使用小驼峰命名法,第一个单词小写,后续单词首字母大写。如:
studentNameAge。
C 语言的关键字(保留字)不能用作标识符。
C11 的关键字和保留字
auto if unsigned
break inline void
case int volatile
char long while
const register _Alignas
continue restrict _Alignof
default return _Atomic
do short _Bool
double signed _Complex
else sizeof _Generic
enum static _Imaginary
extern struct _Noreturn
float switch _Static_assert
for typedef _Thread_local
goto union
练习:
挑选出下列不合法的变量名
123L snoopy_and_me WHILE volatile
__file__ printf _1a2b3c4d long_long
goto_room longlongago