共用体
/*
* 共用体
*
* 共用体的格式:
* union 共用体名称{
* 数据类型 属性名称;
* 数据类型 属性名称;
* }
*
* 共用体的特点:
* 结构体的每个属性会占用一块单独的存储空间,而共用体
* 所有属性都共用同一块存储空间
* 只要其中一个属性发生了变化,其他的属性都会受到影响
*/
union Test{
int age;
char ch;
};
union Test th;
th.age = 33;
printf("%i\n", th.age); //33
th.ch = "b";
printf("%i\n", th.age); //104
枚举
- 枚举的基本概念
/*
* 枚举作用:
* 用于提升代码的阅读性,一般用于表示几个固定值,也叫作枚举常量
* 如果某些变量的取值是固定的,那么可以考虑使用枚举来实现
*
* 枚举格式:
* enum 枚举类型名称{
* 取值1,
* 取值2
* };
*
* 注意: 枚举是用逗号隔开的
* 枚举的取值一般以K开头,然后后面跟上枚举类型,后面在跟上表达式含义
* 主要是为了有多个枚举的时候,方便区分
* 含义你想表达的意思
*/
enum Gender{
KGenderMale, //0
KGenderFemale //1
};
struct Person
{
char *name;
int age;
enum Gender gender;
};
struct Person p1;
struct Person p2;
p1.gender = KGenderMale; //枚举的取值一般以K开头,然后后面跟上枚举类型,后面在跟上表达式含义
p2.gender = KGenderFemale;
//枚举的取值: 默认是从0开始,依次递增,也可以手动取值
printf("%i\n",p1.gender); //0
printf("%i\n",p2.gender); //1
- 枚举的作用域
枚举作用域和结构体作用域一样, 定义枚举变量和结构体一样
局部变量和全局变量
- 局部变量
/*
* 局部变量:
* 定义在{}中,函数中,形参都是局部变量
* 作用域: 从定义那行开始,直到遇到}结束或者遇到return结束
* 存储位置: 局部变量会存储在内存的栈区,会随着作用域的结束而释放
*
* 注意点: 相同的作用域不能出现同名的局部变量
* 如果在不同的作用域内有相同的名称的变量,那么在访问时候,内部
* 会覆盖外部的(就近原则)
*/
int num = 0;
{
int num2 = 0;
}
return 0;
}
void test(int a){ //形参也是局部变量
}
- 全局变量
/*
* 全局变量:
* 定义在{}外面或者函数外面的变量,都是全局变量
* 作用域: 从定义那行开始,直到文件末尾
* 存储位置: 全局变量会存储在内存的静态区中,会随着程序的启动而分配内存存储空间
* ,随着程序的结束而释放
*
* 注意点: 如果有多个同名的全局变量,那么也只会分配一次存储空间,多个同名的全局变量
* 共用一块存储空间
*
*/
int num = 1; //全局变量
void test(int a){ //形参也是局部变量
}
static关键字
- static修饰局部变量
#include <stdio.h>
void test();
int main()
{
/*
* static关键字
* 对局部变量:
*
* 如果利用static 修饰局部变量,那么会将局部变量存储区从栈区转移到静态区
* 静态区只有程序结束时候才会释放
*
* 应用场景: 优化代码,提升代码的效率
*
*/
test();
test();
test();
return 0;
}
void test(){
static int num = 0; // 局部变量
num++;
// 如果不加static输出 1 1 1
// 如果添加static输出 1 2 3
printf("num = %i\n", num);
}
- 对全局变量的作用
* static对全局变量的作用
* 定义一个内部的全局变量
* 1. 该变量只能在定义的文件中使用,不能在其他文件中使用,
* 并且该变量只会独占一块内存空间
*
* 全局变量特性:
* 同名的全局变量会共享一块内存空间,哪怕不是一个文件中的同名全局变量
* 也会共享一块内存空间,这样会导致数据污染
*
* 注意点:
* 局部变量如果没有初始化,里面存储的是垃圾数据
* 全局变量如果没有初始化,系统会自动初始化为0
extern关键字
声明一个全局变量, 代表告诉编译器我在其它地方定义了这个变量, 你可以放心使用
#include <stdio.h>
int main()
{
extern int num; // 声明我们有名称叫做num变量
num = 998; // 使用时已经有对应的存储空间
printf("num = %i\n", num);
return 0;
}
int num; // 全局变量, 程序启动就会分配存储空间
extern和static对函数的作用
#include <stdio.h>
int main()
{
/*
* extern和static对函数的作用
* 1. 如果利用extern修饰函数,代表这是一个外部函数,其他文件也可以使用
* 默认情况下是这样,所以此处可以不记
*
* 2. 如果利用static修饰函数,代表这是一个内部函数,只能在当前文件中使用
* 如果一些函数不想给外界使用,就可以函数添加static
*
* 注意点: extern和static必须写在函数的实现中才有用,不能写到函数的声明中
* 并且如果一个函数已经被声明static,那么在.h文件中就不要编写该函数的声明了
* 因为外部无法使用
*/
return 0;
}
//只能在这个文件中使用
static void test(){
}
企业开发注意点
在企业开发中,代码不是全部写在一个文件中,这样不利于阅读和后续维护
企业多人开发
一般情况下会将业务逻辑代码,编写到.c文件中,同时会将.c文件中需要暴露给外界使用的方式声明到一个.h文件中,.h文件中只写函数声明
#include作用
将后面的指定文件的内容拷贝到当前的文件中
<>从系统的环境变量中去拷贝,一般情况下只有用到系统函数才会使用#include<>
""从指定的路径中去拷贝,一般情况下使用同事的/自己编写的.h文件都用#include"ds.h"
网友评论