C语言中的变量与常量
1. 变量与常量
在整个程序的运行过程中,没有变化且不能变化的,我们称之为常量。
在程序运行期间,可以改变并且有可能会改变的,我们称之为变量。
2. 声明变量
在前几章中,我们已经接触过如何声明一个变量了:
short s;
int n;
long l;
float f;
double d;
声明变量的公式:类型 + 标识符 + 封号
标识符:由我们自己命名的一个标识,用于表示一个变量、函数或其他实体的名称。例如:上面的代码中s,n,l,f,d是由我们自己命名的一个标识,用于表示一个变量。
关键词:在语言标准中规定词汇,并且在代码中有特殊意义和用途。例如:short,int,long,float,double都是表明变量的类型,它们是由语言标准中提供的词汇。
标识符必须经过声明或定义才能正常被编译器识别,而关键词可以直接使用。
因此,要让标识符被编译器看做是一个变量,必须将标识符在使用前声明为一个变量。
接下来我们举几个例子:
正确, 变量使用前被声明了。
// 正确
#include <stdio.h>
int main()
{
int a;
printf("%d\n", a); // 正确, 变量使用前被声明了。
return 0;
}
错误, 变量a未声明。
// 错误
#include <stdio.h>
int main()
{
printf("%d\n", a); // 错误, 变量未声明。
return 0;
}
错误, 变量a在声明前使用。
// 错误
#include <stdio.h>
int main()
{
printf("%d\n", a); // 错误, 变量在声明前使用。
int a;
return 0;
}
3. 变量名命名规则
声明变量的公式:类型 + 标识符 + 封号
既然变量名是一个标识符,因此变量名必须符合标识符的命名规则。
标识符命名规则:标识符由大小写字母,数字和下划线组成。标识符不能以数字开头,并且必须与现有的关键词不同。
short apple; 正确
int 88fruit; 错误,不能以数字开头
long _pencil; 正确,可以以下换线或字母开头
float love_you; 正确,字母开头,标识符可以使用下划线
double int; 错误,不能与现有关键词相同
4. 变量初始化和赋值
4.1 初始化和赋值
我们思考一下,下面的代码,它的打印出来的数值是多少呢?
#include <stdio.h>
int main()
{
int a;
printf("%d\n", a);
return 0;
}
我们发现,它居然报错了!
因为变量a没有被装入任何确定的值,它就被使用了。现在它的值是一个随机值,这样的随机值会导致程序产生错误的结果。
因此,在Visual Studio 2019中默认设置下,使用这种变量是无法通过编译的。
我们需要为变量a装入确定的值,可以通过两种方法实现:
- 变量声明后立刻初始化。
- 变量先声明,其后再为变量赋值。
写法1:变量声明后,立刻初始化。
#include <stdio.h>
int main()
{
int a = 100; // 变量声明后,立即装入100。
printf("%d\n", a);
return 0;
}
写法2:变量声明后,不初始化。后续使用赋值运算符赋值。
#include <stdio.h>
int main()
{
int a; // 变量声明后,为一个随机值
a = 100; // 这里我们使用赋值运算符,将100给了a。
printf("%d\n", a);
return 0;
}
4.2 初始化和赋值的区别
请注意:变量可以多次赋值,但是不能被多次初始化。
多次初始化的写法相当于将变量a声明了两次,在第二次声明变量a时,编译器发现标识符a已经被使用过了,便会报告一个编译错误。
// 正确,将输出100,200。
#include <stdio.h>
int main()
{
int a;
a = 100;
printf("%d\n", a);
a = 200;
printf("%d\n", a);
return 0;
}
// 错误,变量a被重复声明。
#include <stdio.h>
int main()
{
int a;
a = 100;
printf("%d\n", a);
int a = 200;
printf("%d\n", a);
return 0;
}
目前看来,初始化好像就是把变量声明和赋值写在一行了,对于整型和浮点变量确实如此。
但是,对于后面将见到的其他类型,会略有不同。请区别对待初始化和赋值,这两个概念。
5. 常量
字面常量是程序中,一开始就被写死在代码中,且不能被改变的量。
5.1 字面常量
例如:100,200,1.3344,"HelloWorld",被称之为字面常量。
100 = 101;
错误,常量不能被更改
100 = a;
错误,常量不能被更改
被双引号包裹的称之为字符串字面常量。
"HelloWorld"
"HelloWorld" = "你好";
错误,常量不能被更改
5.2 字面常量类型
一个变量的类型在声明的时候被确定。而一个常量的类型,在这个常量写在代码中时也能被确定。
整数字面常量通常是int类型的,除非这个整数字面常量数值过大,超过了int类型的范围,那么这个常量会被看做是long类型。如果更大,那么依次类推为更大范围的整型类型。
带小数的字面常量为double类型。
5.3 符号常量
假设我们有一个商品的价格price,目前为3元。现在我们要计算,10件这个商品的价格。
#include <stdio.h>
# define PRICE 3
int main()
{
int num = 10;
int total;
total = num * PRICE;
printf("total:%d", total);
return 0;
}
我们并没有直接写num * 3,而是定义了一个符号常量PRICE。这样做有什么好处呢?
比如,我们这个程序很庞大,商品的价格不仅仅被用在main函数中,还被用在其他很多函数里面。
如果有一天,这个商品的价格改变了。那么我们就需要到每一个使用过的地方进行修改,这样修改起来会非常麻烦。
但是,我们把商品的价格定义为符号常量,这样只需要修改这个符号常量所代表的值即可。
定义符号常量的公式:
#define 符号常量 值
默认分类 2022-03-01 01:42:28 通过 网页 浏览(2168)
共有0条评论!