2.3.3 变量与常量
2.3.3 变量与常量
变量与常量是最常见的两种数据形式
变量
变量,顾名思义,就是可以改变的量
大多数的数据都是变量
创建变量
创建一个变量的方法为 数据类型+变量名(+初始值)
例如
需要注意的是: 1.赋值char类型变量时,必须在字符外面加一个单引号 2.手动赋值float变量时,推荐在数字后面加一个f 不过对于我们现在的阶段,不加f也没事,但是推荐养成这样一个习惯
变量赋值
事实上,创建变量时,并非一定要初始化(即像上面的变量b那样创建后就立刻赋值)
在创建后,我们可以随心所欲地在任何地方进行赋值

变量的命名规则
变量的命名必须满足以下规则: 1.只能由26个字母,数字和下划线组成 2.不能用数字开头 3.不能和C语言关键字同名 (关键字:被C语言编译器“征用”的、具有固定语法含义的专用单词。int、float还有后续的if、while等都是关键字) 4.严格区分大小写 5.名称不要过长。一般地,在使用 C99 标准时,变量名不建议超过 63 个字符,函数名不建议超过 31 个字符。
TODO: 命名规则随 C 标准的演变
TODO: 将所有关键词直接列在这里
同时,变量的命名最好也遵守下面的格式 这有助于增加代码可读性 格式1:下划线命名法(每个单词之间加一个下划线) int this_is_a_variable; 格式2:大小写命名法(每个单词首字母大写) int thisIsAVariable;(也可以是ThisIsAVariable) 注意 我们一定要极力避免a、b、x这种过于简短、意义不明确的名称。除非这个程序不需要维护,只是用来做题等等。
再次认识格式化输出符号
格式化输出符号用错的问题
我们之前说过 格式化输出符号相当于告诉printf函数我接下来要输出的数据是什么类型
那么,如果我用%f输出一个int,会发生什么呢? 或者反过来,用%d输出一个float,会发生什么呢?
#include <stdio.h>
int main(void)
{
int a = 123;
float f = 3.14f;
printf("%f\n", a);
printf("%d\n", f);
return 0;
}
在我的电脑上某次输出的结果:
事实上这样做是未定义行为,即,发生任何事都是符合 C 语言标准的。在实践中, int 和 float 在内存中的储存方式大相径庭,从而导致打印出了怪异的结果。
如果我们想得到 123.000000 ,可以写 printf("%f\n", (float) a); ,即在将 a 传入 printf 之前先做一次显式类型转换。
格式化输出符号代表的是什么?
事实上,格式化输出符号在指明输出内容类型的同时,也相当于是输出变量的"占位符"
问题 我们现在要做一个成绩系统,要求输入一个数据n代表一个学生的成绩,然后打印出"该学生的成绩是n"。想一想,该怎么做?
事实上,格式化输出符号就是表示了输出的变量的所在位置 所以我们像下面这样写就可以
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int score;
scanf("%d", &score);
printf("该学生的成绩是%d分", score);
return 0;
}

常量
与变量相反,常量就是定义后不能再改变的量 创建常量的方法主要有两种
第一种和创建变量类似 只不过是在数据类型前加一个const
即const 数据类型 名称 = 初始值; 例如 const float pi = 3.14f;
注意 :常量必须在定义的同时赋予初始值。其实一点都不意外,毕竟如果你声明了一个变量,那么你一定要给它赋值才能让它拥有有一个意义的值,但是使用 const 之后赋值操作直接就被禁止了。所以常量必须在定义的同时赋予初始值,不然它就没有意义了。
第二种,则是定义在所有代码之前
两种定义方式的区别:
| 特点\定义方式 | const | define |
|---|---|---|
| 内存 | 程序运行时分配内存 | 程序运行时不分配内存 |
| 数据类型 | 规定数据类型 | 不规定数据类型,只是替换 |