生活中存在很多值。为了衡量和储存这些数值,就出现了变量和常量。
1. 常量
常量是一些无法改变的数值,比如物理学里面的重力加速度,永远不会改变。常量分为字面常量,标识符常量和枚举常量三种。
1.1 字面常量
字面常量是直接写出的固定值,他包含c语言中的可用数据类型,分为整型常量和字符常量。整型常量有1,2,3.3这些,字符常量为abc等。
1.2 标识符常量
#define是C语言的预处理指令,预处理也就是在编译之前进行的处理,在编译之前会进行替换。
在c语言中,define可以定义任意一个常量,比如
在这里程序会对我们输入的身高和体重两个参数进行预处理,相对我们在main函数里面再去定义这个数据来说更早实现这一步。
如果我们想描述一个人,在当前的状况(时间空间)下他的某些特征是不会改变的,那我们可以给他定义一些数值,如果后期需要修改只需要在define的时候修改数值。
1.3 枚举常量
生活中有很多数值是具有连续性的,比如一周有7天,从星期一到星期日,那我们可以用枚举的办法给他赋值,在这种情况下Monday的初始化数值为0,Tuesday为1,以此类推,到星期日为6.
注意:
使用枚举常量的时候可以初始化,但是不能被修改,换而言之,则是只能将他们的数值赋给其他变量。
不能用取地址操作符取得他们的地址。
不能在程序中出现和枚举变量名字一样的变量。
2. 变量
变量来源与数学,是计算机语言中用来存储数值的抽象概念。变量在生活中无处不在,就比如一个人的体态特征,年龄等等因素随着时间的流逝就会变化。就像计算机中的时间戳一样,从1970年的1月1号开始,每一分每一秒都在改变。
如果我们引入一个变量,而没有给他初始化,就会出现程序出错的状况(变量所包含的数值是一个随机值)
2.1 局部变量和全局变量
全局变量和局部变量最大的区别在于作用域和生命空间。全局变量可以在整个程序中甚至跨程序使用,而局部变量只能在这个小片段里面使用,一旦该部分程序运行结束,则局部变量的生命周期结束。
2.2 static修饰全局变量
static的作用为修饰局部变量变成全局变量
static修饰局部变量改变了变量的生命周期,生命周期改变的本质是改变了变量的存储类型,本来局部变量存储在栈区,通过static修饰后存到静态区,则该变量的生命周期就和全局变量一样了。
3. const修饰
3.1 const修饰变量为常量
变量是可以被改变的,如果我们想将变量变成一个可以定值(类似与常量),就可以引入const。
在这种情况下,a属于一个变量,在初始化后通过程序将他改变为100,如果加入const,就变成
程序显示a变量无法改变,则认为a是一种常变量。
3.2 常变量的修改
如果我们想要修改他的话,虽然有const的修饰,但是我们可以绕过a,去使用a的地址,就可以实现常变量的修改。
3.3 const修饰指针变量
#include<stdio.h>
void test1()
{
int n = 1;
int m = 2;
int *p=&n;
*p = 3;
p = &m;
}
void test2()
{
int n = 1;
int m = 2;
const int *p=&n;
*p = 3;
p = &m;
}
void test3()
{
int n = 1;
int m = 2;
int const *p=&n;
*p = 3;
p = &m;
}
void test4()
{
int n = 1;
int m = 2;
const int const *p=&n;
*p = 3;
p = &m;
}
int main()
{
test1();
test2();
test3();
test4();
return 0;
}
const修饰指针变量的时候,
如果const放在*左边,修饰的是指针指向的内容,保证指针变量的内容不能被改变,但是指针变量本来的内容可以改变,
如果const放在*右边,修饰的是指针本身,可以保证指针变量的内容不能修改,但是指针指向的内容可以通过指针改变。
好了,文章到这边基本上介绍完了常量与变量,作者制作不易,希望能收获你的喜欢和关注