C语言 共同体 枚举 修饰词知识点
2018-09-09 本文已影响0人
超级皮波9
共同体
- 共同体格式:
union 共同体名称{
数据类型 属性名称;
数据类型 属性名称;
};
union Test {
char ch;
int age;
};
- 特点
结构体的每个属性都会占用一块单独的内存空间,而共同体所有的属性都共用一块储存空间,只要其中一个属性发生改变,其他属性都会受到影响 - 应用场景
同一个变量,在不同的时刻需要表示不同类型数据的时候,就可以用共同体
枚举
- 枚举是用于提升代码的阅读性,一般用于表示几个固定的值,所以也叫做枚举常量
- 枚举的格式
enum 枚举类型名称{
取值1,
取值2,
};
-
注意点 和结构体,共用体不同,枚举是
逗号
隔开
枚举的规范
- 枚举的取值一般以K开头,后面跟上枚举类型的名称,后面再跟上表达的含义,K代表这是一个常量
- 枚举的类型名称,主要是为了有多个枚举的时候,方便区分含义,和表达的意思
- 枚举的取值默认情况下是从0开始取值,一次递增
- 也可以手动指定从几开始,一次递增
#include <stdio.h>
int main(){
//枚举
enum Gender{
KGenderMan,
KGenderWoman,
};
struct Person{
enum Gender gender;
};
struct Person p;
p.gender = KGenderMan;
return 0;
}
作用域和定义
- 作用域和结构体/普通变量一样
- 定义和结构体一样
全局变量和局部变量
局部变量
-
概念
定义在{}中,函数中,形参都是局部变量 -
作用域
从定义的那一行开始,直到遇到{}结束或者遇到return为止 -
储存位置
局部变量会储存在内存的栈区中,会随着定义变量的代码执行分配储存空间,会随着作用域的结束而自动释放 -
特点
1.相同作用域内,不能出现同名的局部变量
2.不同作用域内有用名的变量,那么在访问时,内部的会覆盖外部(就近原则)
全局变量
-
概念
定义在{}外挥着函数外的变量,都是全局变量 -
作用域
从定义的那一行开始,直到文件末尾 -
储存位置
全局变量会储存在内存的静态区中,会随着程序的启动分配存储空间,随着程序的结束释放 -
特点
如果多个同名的全局变量,系统只会分配一次空间,多个同名的全局变量共用一块储存空间
修饰符
auto//register
- auto和register都是用于修饰局部变量的
它们年的作用是修饰编程的存储特性
auto: 特点就是告诉编译器, 局部变量离开作用域自动释放
默认情况下所有局部变量都是auto的
static对局部变量的作用
- 如果利用static修饰局部变量, 那么会将局部变量的存储区域从栈区移动到静态区
- 静态区只有程序结束才会释放
extern 修饰词
- extern用于声明一个变量,声明的变量并不会开辟储存空间
- extern 一般用于全局变量
-
原因
局部变量,只有执行到那一行代码才会分配储存空间,所以声明了但是在使用的时候还是没有分配,所以局部变量不能使用extern
全局变量,会随着程序的启动分配储存空间,所以只要声明了,使用时已经分配好了储存空间,所以全局变量能使用extern
static对全局变量的作用
- 定义一个内部的全局变量,
- 1.该变量只能在定义的文件中使用, 不能在其它文件中使用,
- 2.并且该变量会独占一块内存空间
extern和static对函数的作用
- 如果利用extern修饰函数, 代表这是一个外部函数, 其它文件中也可以使用
- 注意点: 默认情况下所有函数都是外部函数, 所有的函数都可以在其它文件中访问, 所以extern是一个废物
- 如果利用static修饰函数, 代表这事一个内部函数, 只能在当前文件中使用
- 如果一些内部函数不想提供给外界使用, 那么就可以给函数添加一个static