WHCSRL 技术网

【C语言攻略】—从零开始的C语言生活---初阶篇(2)之常量与变量

目录

前言

变量与常量

      什么是变量?

     什么是常量?

字面常量

 const修饰的常变量

define定义的常量

枚举常量

结语


前言

各位大佬好呀,日更博主又来了,今天来讲讲常量与变量的关系和定义方式。

变量与常量

      什么是变量?

        顾名思义,可以改变的量就是变量,生活中例如年龄、身高和体重等等都是可变的量。C语言的变量则是在被初始化后依旧可以更改的值,我们称为变量。码来:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. //创建变量并初始化
  5. int num = 10;
  6. printf("%%%%d ",num);//打印10
  7. num = 20;//修改变量值
  8. printf("%%%%d ",num);//打印20
  9. return 0;
  10. }

当变量num被创建并初始化后,再对num进行赋值操作,改变num的值,则num称为变量。

     什么是常量?

      常量与变量性质相反,变量是被初始化后依旧能够改变,而常量在被初始化后就无法再对他进行赋值修改操作。生活中也有许多的常量:比如圆周率(π)、人的性别还有一周有几天等。

      C语言常量的定义方式有四种:字面常量const修饰的常变量define创建的常量和枚举常量

字面常量

字面常量就是直接定义的常量,还可以给函数直接传入自己想传入的值,或者给数组大小进行初始化都可以用字面常量

  1. #include<stdio.h>
  2. int main()
  3. {
  4. //字面常量
  5. 100;
  6. 3.14f;
  7. 'c';
  8. arr[10];
  9. //直接传一个10让printf函数打印出来
  10. printf("%%%%d ",10);
  11. return 0;
  12. }

 const修饰的常变量

        是不是觉得特别别扭?为什么叫常变量?到底是常量还是变量呢?别着急,我来一一解释。const关键字是用来修饰变量的,使变量拥有和常量一样不可更改的特性。

       可见,当我们想要对num值进行修改时,编译器报了个错误,说表达式必须是可修改的左值。说明num被const修饰以后具有了不可改性。但是为什么说他的本质还是变量呢?变(常量)了但是没有完全变。其实想要验证也很简单。

 

       当我们用呗const修饰过的num给数组大小进行初始化时,编译器又给我们报了个错误,说表达式必须含有常量,说明num就算被const修饰过后依然不是一个常量。只是拥有了常量不可被更改的特性。const关键字一般是用来保护函数所传参数的,保护参数不会被修改,这里还是以后再讲。

请注意:我所使用的编译器是【Visual Studio 2019】,在VS编译器中,是不支持这样去赋值的。但在C99标准中,支持这种变长数组,允许使用变量来指定数组大小。

define定义的常量

      由define定义的参数,是正儿八经的常数,我们一般将define定义的在全局区,当然你定义在函数体内也是可以的,define定义的命名方式我们一般都会使用大写(小写也没问题,但是一般都是大写),这难道就是程序员之前的默契吗?

上代码:

  1. #include<stdio.h>
  2. #define MAX 100
  3. int main()
  4. {
  5. //用来等于数组大小也是谋问tei(第二声)啊
  6. int arr[MAX];
  7. //打印100
  8. printf("%%%%d ",MAX);
  9. return 0;
  10. }

枚举常量

      最后就是枚举常量,这里还是先简单提一嘴。枚举常量就是将能一一列举出的常量给一一列举出来,比如一个人的年龄:男、女、保密,亦或是一周有多少天,从周一到周日。这些都是可以一一列举的事物,就是枚举。

  1. #include<stdio.h>
  2. enum Sex
  3. {
  4. MALE,
  5. FAMALE,
  6. SECRECY
  7. };
  8. int main()
  9. {
  10. printf("%%%%d ",MALE);//0
  11. printf("%%%%d ",FAMALE);//1
  12. printf("%%%%d ",SECRECY);//2
  13. return 0;
  14. }

        枚举类型的默认值是从0开始之后创建多少个成员,成员默认值依次向后增加,也可以自己进行初始化。要注意的是,当你前一个成员赋了初值,而后面的成员没有被初始化。后面的成员就会跟着前一个被赋值的成员所赋的值为起点继续向后增加。是不是感觉说的有点乱?

 还是这段代码:

  1. #include<stdio.h>
  2. enum Sex
  3. {
  4. MALE,
  5. //赋初值
  6. FAMALE = 10,
  7. SECRECY
  8. };
  9. int main()
  10. {
  11. printf("%%%%d ",MALE);//0
  12. printf("%%%%d ",FAMALE);//10
  13. printf("%%%%d ",SECRECY);//11
  14. return 0;
  15. }

FAMALE被初始化为10后,后面的SECRECY的默认值跟着前一个成员改变了,以FAMALE所赋的数值开始继续向后默认加一。

结语

来分享一下自己的学习笔记,日更虽好,可不要耽误刷题敲代码哦。

 

推荐阅读