常量

常量指的是代码中不变的量

在c语言中常量分为一下几种

  • 字面常量
  • const修饰的常量
  • define定义的标识符常量

  • 枚举常量

字面常量

字面常量大体包括以下几种

1
2
3
4
5
6
7
8
int main()
{
3.14; //浮点型常量
10; //整型常量
'a'; //字符常量
"abcdef"; //字符串常量
return 0
}

const修饰的常变量

在介绍const修饰的常变量之前,先来了解一下常变量

常变量

常变量是一个具有常属性(不可被改变的属性)的变量

首先看一下变量

1
2
3
4
5
6
7
int main()
{
int num = 1;
num = 10;
printf("num = %d\n", num);
return 0;
}

结果很显然是10

那么常变量会是怎么样呢?

在说常变量之前,先引出数组

数组

C语言中的数组初始化是有三种形式的,分别是:

  1. 数据类型 数组名称[长度n] = {元素1,元素2…元素n};
  2. 数据类型 数组名称[] = {元素1,元素2…元素n};
  3. 数据类型 数组名称[长度n]; 数组名称[0] = 元素1; 数组名称[1] = 元素2; 数组名称[n-1] = 元素n;

大括号内进行初始化,方括号内一定为常量

例如:初始化一个数组 int arr[3] = {1,2,3}; 那么arr[0]就是元素1

值得注意的是

  1. 数组的下标均以0开始;
  2. 数组在初始化的时候,数组内元素的个数不能大于声明的数组长度;
  3. 如果采用第一种初始化方式,元素个数小于数组的长度时,多余的数组元素初始化为0;
  4. 在声明数组后没有进行初始化的时候,静态(static)和外部(extern)类型的数组元素初始化元素为0,自动(auto)类型的数组的元素初始化值不确定。

回到常变量

先来说明他具有常量的性质

1
2
3
4
5
6
7
int main()
{
const int num = 1;//num从变量变成常变量
num = 10;
printf("num = %d\n", num);
return 0;
}

从结果上告诉了我们,常变量是具有常属性的

如何说明常变量,本质上是变量呢?那么就需要提到刚才说到的数组了

1
2
3
4
5
6
7
8
9
10
int main()
{
int arr[10] = {0};
//int arr[n] = {o};//这行代码不行,因为n是变量而非常量
//那换成const修饰的常变量呢
const n = 10;
int arr2[n] = {0};

return 0;
}

因此我们可以得出结论常变量是具有常属性的变量

#define定义的标识符常量

1
2
3
4
5
6
7
8
#define MAX 10000
int mian()
{
//MAX = 20000 //err 不可更改
int M =MAX;
printf("M = %d\n", M);
return 0;
}

枚举常量

枚举常量指的是一一可以列举的常量

例如:性别,血型等等

枚举变量需要提前进行定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
enum SEX  //在这里可以列举出枚举变量未来的可能取值
{
MALE,
FEMALE,
SECRET
};
int main()
{
enum SEX s = MALE;
//enum SEX s = boy;//err,因为定义时没有给予‘boy’的可能取值
printf("%d\n", MALE);
printf("%d\n", FEMALE);
printf("%d\n", SECRET);
return 0;
}

因此枚举常量是从0开始的常量,那么它可以被更改吗?来试一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
enum SEX  //在这里可以列举出枚举变量未来的可能取值
{
MALE = 3,//可以在这里修改
FEMALE,
SECRET
};
int main()
{
enum SEX s = MALE;
//MALE = 3;//err 不能在这里修改
printf("%d\n", MALE);
printf("%d\n", FEMALE);
printf("%d\n", SECRET);
return 0;
}

好修改成功了,与数组的更改后效果一致