C语言中的常量和变量

本文详细介绍了C语言中的常量和变量,包括字面常量、const修饰的常变量、#define定义的标识符常量、枚举常量,以及变量的定义、声明、标识符、赋值与初始化、作用域和生命周期。讨论了const修饰全局变量、常量指针和指针常量,以及预编译指令#define在定义常量中的应用。同时,枚举类型的使用和枚举元素的值的自定义也有所阐述。最后,文章提到了内存管理中的栈和堆的区别和作用。
摘要由CSDN通过智能技术生成

一.常量和变量的介绍

首先,常量和变量均是用来存储数据的。
1.常量:在程序执行的过程中它的值是不可以改变的
如:圆周率 性别 血型等。
常量分为**(1)字面常量****(2)const修饰的常变量**(3)#define定义的标识符常量 (4)枚举常量**
补充:对于#define定义的标识符常量,没有分号结束标记

字面常量:

如20 3.14

const修饰的常变量:(本质上还是一个变量,而不是常量)

当n没有被const修饰
例:

int num=10;
printf("%d\n",num);
num=20;//修改
printf("%d\n",num);
return 0;

结果是

10
20

但是,当const修饰num后

这里要注意,用const修饰变量的时候,一定要给变量初始化,否则之后就不能再进行赋值了

const int num=10;//也可以写成  int const num=10;
printf("%d\n",num);
num=20;//修改
printf("%d\n",num);
return 0;

结果会报错
因为const修饰后,不可以再更改数值

那么,const修饰的变量最终变为了常量,还是任然是变量呢?
如下的一个例子:证明它还是一个变量

例:

int n=10;
int arr[n]={
   0};
return 0;

结果会报错“应输入常量表达式”
[]中需要的是一个常量,而n是一个变量

const int n=10;
int arr[n]={
   0};
return 0;

结果会报错
说明const修饰后的n本质上仍然是变量

补充一个用const修饰常量静态字符串

const char* str="abcdef";

如果没有const修饰,当我们在之后的代码不小心写出str[2]='g';这样的语句时,这个语句会导致对只读内存区域的赋值,然后程序会立刻异常终止。当加了const之后,这个错误在程序编译的时候就被检查出来,这就是const的好处,让逻辑错误在程序编译期就被发现

const修饰全局变量

全局变量的作用域是整个文件,应该尽量避免使用全局变量,因为一旦有一个函数改变了全局变量的值,会影响到其他引用这个全局变量的函数,导致bug很难发现。如果一定要使用全局变量,应尽量使用const修饰全局变量,防止不必要的人为修改

常量指针和指针常量

常量指针:是指针指向的内容是常量
注意:
(1)常量指针指的是不能通过这个指针改变变量的值,但是可以通过其他的引用来改变变量的值
例:

int a=5;
const int * n=&a;
a=6;
//结果是6

(2)常量指针指向的值不能改变,并不意味着指针本身不能改变,这个常量指针仍可以指向其他地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值