1、常量

     字面常量:具体数字0、1 、2等

     const修饰的常变量:const int num

          修饰全局或局部变量都可以,但是不可用在int arr[num]={0};处,因为常变量是变量,不是常量,此处只能用常量

          const int* pa = #---当在*左边时,修饰的是pa,此时不能通过pa改变*pa的值(*pa= 20;)不然不报错

          int* const pa = #---当在*右边时,修饰的是pa,此时不能修改地址,若(pa = &num1;)则会直接报错

          const int* const pa = #---此时*pa和pa都不可以发生改变(第25个视频3小时处有个很有意思的故事)

     #define定义常量标识符:#define MAX 100

          只能用作全局变量,且此处可以用作初始化数组int arr[MAX] = {0};

          宏定义:#define MAX(x,y) (x>y?x:y)

     枚举常量:enum Sex{Male,Female,Secret};(换行写的),使用过程enum Sex LiMing = Male;

2、变量

     全局变量:定义在大括号之外的

          全局变量不初始化默认值是0

          生命周期:整个程序的生命周期

     局部变量:定义在大括号之内的,且两者可以重名,但容易有bug,其中局部变量优先

          局部变量不初始化默认值是随机值

          生命周期:进入作用于生命周期开始,出作用域生命周期结束

3、static

          static修饰全局变量,会改变全局变量的作用域;全局变量本身具有外部链接属性,经过static修饰后会变为内部链接属性,只能在自己的.c文件中使用,此时用extern会出错(static int a = 0;)

          static修饰函数,会改变函数的作用域;函数本身具有外部链接属性,经过static修饰后会变为内部链接属性,只能在自己的.c文件中使用,此时使用extern会出错。(static int Add (int x,int y);)

          static修饰局部变量,会改变局部变量的生命周期,变为整个程序的生命周期,但作用域不会发生改变,例如static int a = 1;a++;当再次进入该函数时,a并不会被重新赋值为1,此时的a是2,再a++。