常量:顾名思义,就是不变的量。
在C语言中我们一般将常量分为以下四种类型:
| 字面常量 |
| const修饰的常变量 |
| #define定义的标识符常量 |
| 枚举常量 |
字面常量
字面常量一般没有实际的意义,如下面程序:
#includeint main() { 2; 3.13; 'a'; "abcdef"; return 0;
我们分别写出来了2(整型)、3.13(浮点型)、a(字符型)、abcdef(字符串),这些常量就被称为“字面变量”,但是我们也明显的发现这些字面常量没有实际的意义。
const修饰的常变量
#includeint main() { int a = 10; a = 20; printf("%dn",a); return 0; }
上面的程序我们先将a变量进行了定义,然后我们将a进行了赋值并输出了它,阅读上面的程序,我们显然可以得到输出结果为20。
#includeint main() { const int a = 10; int a = 20; printf("%dn",a); return 0; }
上面的程序,在int a=10前面加上了const,我们就将a从变量变成了常变量(顾名思义就是数字不变了,但是本质上还是变量),我们在后面对a又进行了赋值(即使赋予了相同的值也是不可以的),这就与前面“const修饰a,a是不变的。”产生了冲突,所以上面的程序就不可以执行!
#includeint main() { const int a = 10; printf("%dn",a); return 0; }
但是为什么我说const修饰后a是常变量,而不是常量呢?
我们可以通过下面的程序来证明:
#includeint main() { int a = 10; int [a] = { 0 }; return 0; }
上面这个程序中int [a]={0}是数组,其中a应该是常量(数组后面会讲,我们先知道这个就可以了);因为a要是一个常量,但是我们定义的a,我们在后面没有对a进行赋值,所以a是一个常量,所以上面的程序是执行不出来了的。
#includeint main() { const int a = 10; int [a] = { 0 }; return 0; }
上面这个程序,我们知道a是一个定值,假如const定义后的a是一个常量,那么我们这个程序是可以执行的,但是当我们执行的时候,我们就会发现a是一个变量,不是常量,也就是前面说的常变量。
#define定义的标识符常量
#include#define ah 1000; int main() { int a = ah; printf("%dn",a); return 0; }
如上面的程序我们先将ah声明出来,在这个程序中我们就默认ah的值为1000,后面我们对a这个变量进行了初始化,我们打印出来就可以得到结果1000。
#includeint main() { #define ah 1000; int a = ah; printf("%dn",a); return 0; }
当然我们的define定义在里面也是可以的,但是一定要定义在我们赋值的前面!
枚举常量
枚举常量中的枚举和数学上的枚举法的枚举是一样的,就是我们可以将这些数据一一举例出来。枚举在我们生活中也是广泛存在的,例如我们说性别、血型等,我们都是可以一一例举出来的。(在我们后面的学习中,我们可以更加详细的学习)
在C语言中我们使用enum来对数据进行枚举:
enum hhh
{
a,
b,
c,
};
上面的程序我们对变量hhh就行了枚举,变量hhh未来可能的取值只有a,b,c.(这三个值叫枚举常量)
当我们将上面的打印出来:
#includeenum hhh { a, b, c, }; int main() { printf("%dn",a); printf("%dn",b); printf("%dn",c); return 0; }
我们可以知道上面的可能取值成0开始,0的位置为前面去变量hhh的定义的第一个也就是a,然后按hhh定义的顺序逐渐增加1。
假如我们一开始对a赋值了20,那么
#includeenum hhh { a=20, b, c, }; int main() { printf("%dn",a); printf("%dn",b); printf("%dn",c); return 0; }
但是它只知道像后加,不会向前减!
#includeenum hhh { a, b=23, c, }; int main() { printf("%dn",a); printf("%dn",b); printf("%dn",c); return 0; }
我们也是可以强行赋值,例如我们可以对a赋值20,对b赋值100,那么输出结果就是20 100 101。
我们也可以对变量进行全部进行赋值,那么输出结果就是我们所赋的值。所以我们可以得出一个结论:枚举输出时,假如是赋值,那么就是赋值不变,如果不是赋值,那么就看前面的数,然后加1,输出结果就是当前数字,如果是第一个,那么输出结果就为0。
我们也是可以使用枚举常数的,先将上面的enum hhh复制下来(建议复制,不要打出来。)后面加上我们要赋值的变量,然后输出就可以了。
enum hhh m = c;
#includeenum hhh { a=30, b=23, c, }; int main() { enum hhh m = c; printf("%dn",m); return 0; }
从上面的程序,我们知道打印的是m,而m是我们与枚举元素c的值相等。我们发现c没有赋值,所以我们看前面一位,前面是赋了值,它是23,所以c就是24,所以我们打印的结果就是24。



