目录
(1).由const修饰的变量在后续代码赋值中是不允许更改的
一.字面常量:
单独的字符,能直接判断他的值和类型。如:3.14,a。
二.const 修饰的常变量:
(1).由const修饰的变量在后续代码赋值中是不允许更改的
//const - 常属性
// const int n = 10;//n是变量,但是又有常属性,所以我们说n是常变量
(2).修饰局部变量:
const int num=9;
int const num=9;
这两种写法是一样的,都表示变量num的值不能被改变,用const修饰变量时,一定要初始化,否则之后就不能再进行赋值了
特殊情况(const用于修饰常量静态字符串):
const char* str="techdreamer";
如果没有const的修饰,我们可能有时候会修改后续的代码,比如str[4]=’L’
,这样会导致对只读内存区域的赋值,使程序异常终止。而加上const修饰之后,我们可以立马检查出代码的错误.
补充信息(常量静态字符串):在C语言的内存当中,针对不同的数据我们所存放的位置都是不一样的。 这里只要知道字符串常量属于静态存储类别,存放在静态区。 这就意味着字符串只会被存储一次,在整个程序的生命周期内存在,即使函数被调用多次。 用双引号括起来的内容被视为指向该字符串存储位置的指针。
(3).修饰全局变量(防止全局变量被随意修改):
全局变量的作用域是整个文件,且全局变量的生存周期为程序运行的整个过程,所以我们应该尽量避免使用全局变量,一旦某个函数改变了全局变量的值,会影响到其他引用这个变量的函数,是一个很隐蔽的操作。如果一定要用全局变量,应该尽量的使用const进行修饰,防止不必要的人为修改,使用 const 修饰过的局部变量就有了静态特性,它的生存周期也是程序运行的整个过程,虽然有了静态特性,但并不是说它变成了静态变量。
const更多详细的用法请参考:https://zhuanlan.zhihu.com/p/373141333
三.#define 定义的标识符常量:
格式:#define <宏名/标识符> <字符串>
(1).有define定义的标识符可以直接使用:
例如下面代码 define定义的 MAX 赋值为10,可以直接在程序中使用,提高了代码的效率.
#define MAX 10
#include <stdio.h>
int main()
{
printf("MAX=%d", MAX);
return 0;
}
//输入MAX=10
(2).定义宏------带参数:
#define
可以用于定义宏,即可以使用宏来代替表达式。通过宏,可以将一段复杂的代码用一个简单的名字来表示,提高代码的可维护性和可读性。
#define add(x) ((x)+(x))
#include <stdio.h>
int main() {
int num = 9;
int sum;
sum = add(num);//可以直接使用这个表达式:((x)+(x))
printf("%d的和是:%d", num, sum);
return 0;
}
(3). 条件编译:
#define
还可以用于条件编译,即根据某些条件选择性地包含或排除代码。
#include <stdio.h>
#define DEBUG
int main() {
#ifdef DEBUG
printf("调试模式下的输出\n");
#else
printf("正常模式下的输出\n");
#endif
return 0;
}
#ifdef 即当标识符被定义过,则执行对应下面的程序,否则执行其他的代码。
条件编译语句更多知识点请参考:https://blog.csdn.net/qq_40584593/article/details/85217303
(4).避免宏的副作用:
宏的参数在宏展开时可能会被误解,因此在编写宏时需要确保宏的参数没有副作用,以免导致意外行为。
#include <stdio.h>
#define SQUARE1(x) ((x) * (x))
#define SQUARE2(x) (x * x)
int main() {
int num = 5;
int result1 = SQUARE1(num + 1);
int result2 = SQUARE2(num + 1);
printf("SQUARE1计算后的结果为: %d\n", result1);
printf("SQUARE2计算后的结果为: %d\n", result2);
return 0;
}
结果:
SQUARE1计算后的结果为: 36
SQUARE2计算后的结果为: 11
上述例子中,result1
相当于(num+1) * (num+1) = 36
,而result2
相当于num + 1 * num + 1 = 5 + 1 + 5 = 11
,是字符上的拼接而非运算后的逻辑拼接,需要注意区分。
更详细的用法可参考:https://blog.csdn.net/PengXing_Huang/article/details/135407360
C语言宏#define(精通详解) - 知乎 (zhihu.com)
四.枚举常量:
枚举常量即可以把某些数据一一列举出来.使用enum来修饰。
格式:enum 标识符 {}。
(1).枚举类型的定义:
enum Sex
{
MALE,
FEMALE,
SECRET
};
//MALE,FEMALE,SECRET - 枚举常量
int main()
{
//enum Sex s = FEMALE;
printf("%d\n", MALE);//0
printf("%d\n", FEMALE);//1
printf("%d\n", SECRET);//2
return 0;
}
上述代码定义的enum Sex是一种枚举类型,{}中内容是枚举类型的可能取值,也可叫作枚举常量。这些枚举常量都是有值的,在不赋值时从0开始,依次往后递增1。
// 枚举关键 - enum
//
enum Color
{
RED,
YELLOW=6,
BLUE
};
int main()
{
enum Color color = BLUE;
color = YELLOW;
printf("YELLOW=%d\n",YELLOW);//=6
printf("LUE=%d\n", BLUE);//=7
//BLUE = 9; //是不能修改的,改了会报错
return 0;
}
(2).创建变量:
enum Color
{
RED,
YELLOW,
BLUE
};
int main()
{
enum Color color = BLUE;//创建color变量
color = YELLOW;
return 0;
}
关于enum的更多使用可以参考此文章:https://zhuanlan.zhihu.com/p/349458733