C语言基础要素(007):使用变量
定义变量的同时可以给定一个值,这叫初始化变量;未初始化的变量,其值在程序运行时是不确定的。变量在定义之后可以多次设置值,这称为赋值。定义使得变量从无到有,而赋值则改变已有变量的状态。
变量只能被初始化一次,但可以进行多次赋值,这两种操作均是通过赋值运算符(=)执行的。
- 变量初始化语法:
变量类型 变量名 = 表达式;
- 为变量赋值语法:
变量名 = 表达式;
char c = 'x'; // 定义并初始化
int width = 200; // 定义并初始化
float sx; // 定义未初始化(值不确定)
sx = 3.14; // 赋值(值已确定)
sx = 6.282; // 赋值(值已改变)
在初始化或赋值时,我们给了变量一个具体的值,如 ‘x’、3.14、200等,像这种通过字面表达就能知道其值的数值,称为字面量。
printf("glimix.com"); // glimix.com 是一个字面量
int age = 19; // 19 是一个字面量
可以在一行代码中同时定义并初始化同一类型的多个变量,变量之间用逗号分隔;但作为一个良好的实践,并不建议这样做。
int a1 = 3, b1, c1 = 8; // ok: 定义3个int变量,只有 a1、c1 被初始化
int a2 = 3, char c2 = 9; // error: a2、c2 是类型不同型(单条语句只能定义同一类型的变量)
int a3 = 3; char c3 = 9; // ok: a3 定义后是分号,表示语句结束;这里,一行书写了两条定义语句。
可以将变量想像为一个盒子:
- 向盒子内放入一个物体相当于赋值操作。
- 盒子仅能存放一个物体,后续放入时,前一个物体被丢弃,即前一个变量值被覆盖。
- 盒子只能存放同一类型或能转换到此类型的物体。
- 盒子可以重复使用,即多次赋值。
int a = 3; // 新买了一个盒子,出厂自带3
a = 9; // 数据3被挤出去,9进入到盒子。
a = 0; // 盒子重复使用,9被挤出,0进入到盒子。
输出变量
输出变量时要根据变量的类型使用相应的格式控制符,char、int、double 这三种类型的变量输出格式符分别是: %c、%d、%f
。一开始我们可能记不清格式符是%d还是d%时,此时只需要记住:特殊的字符在前面!符号%与字母d相比较,%比较特殊,因此它在前面,记作%d而非d%。输出这三种类型的变量值可以使用如下代码:
printf("letter: %c\n", c);
printf("width: %d\n", width);
printf("pi: %f\n", pi);
这是我们第一次扩展使用printf函数。printf
函数的第一个参数是一个用双引号扩起来的字符串,它也叫格式化字符串
。以前我们只是简单的输出文本,现在这个字符串中有了格式控制符,因此,它成了真正意义上的格式化字符串。当这个字符串有1个格式控制符时,你需要在格式化字符串结束后,加上逗号(,),然后是要输出的变量或表达式,多个变量时,以此类推;对于非格式控制符或转换字符则按原样输出。
printf("%c %d %f\n", c, width, pi); // 一次使用3个格式控制符输出3个变量
printf("%c,%d\n", 'x', width); // 输出字面量x(虽然没有必要)与变量width
当输出变量时如果数据类型与格式符不匹配,可能会得到你想要的结果,也可能会出错,这取决于你的使用目的。下面的代码,在合理的数值范围内,使用%d格式符输出char类型,便得到了字母对应的ASCII码值,因为char类型事实上是一种小整型。
char d = 'd';
printf("letter: %c ==> ascii: %d\n", d, d);
示例程序
#include <stdio.h>
int main()
{
char letter = 'x';
int width = 200;
double pi; // pi变量在定义时没有赋予初值,pi值在这里是不确定的。
pi = 3.141592; // 使用赋值运算符把3.141592赋予pi变量。
printf("letter: %c\n", letter);
printf("width: %d\n", width);
printf("pi: %f\n", pi);
printf("\n");
char d = 'd';
printf("letter: %c ==> ascii: %d\n", d, d);
d = 65;
printf("number: %d ==> letter: %c\n", d, d);
return 0;
}
练习
- 使用一行代码运用多个格式控制符输出一组变量。
- 打印一个未初始化、也没赋值的变量,看看是什么结果。
- 测试printf函数,当格式化字符串中有多个控制符,但少给1个参数时的输出情况。
- 定义5个变量,初始值依次为 72、101、108、108、111,使用 %c 格式符打印结果。