标签:存在 定义 需要 volatile 静态变量 mes 存储 取出 union
static关键字
主要有4个使用场景:
1、修饰类的成员变量和成员方法(常用):
被修饰的成员属于类,不属于单个类对象,为所有类对象所共享。
并且建议通过类名调用。被修饰的成员变量与方法存放在静态存储区。
2、 函数内的静态变量:
其作用范围为函数内,其生命期为整个程序生命期。
这样可以保证多次调用中其值一直得以保存。
该变量在内存中只被分配一次。
3、模块内的静态全局变量:(还可以是静态函数)
可以被模块内所用的函数访问,不能被其他模块的函数访问。(在其他模块中使用需要使用 using namespace);
全局变量本身是静态存储的,静态全局变量也是静态存储的。
但是非静态全局变量的作用域是整个程序(一个源程序由多个源文件组成),非静态全局变量在所有源文件中都是有效的。
静态全局变量则限制了其作用域,只在定义该变量的源文件内有效,同一程序的其他源文件不能使用它。
这样做的好处是,可以避免其他源文件的引用而引起错误。
static起初是为了表示退出一个块后仍然存在的局部变量。
后来又有了第二种含义,用来表示不能被其他文件访问的全局变量和函数。
这是为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。
=================================================
sizeof 是关键字不是函数
extern :置于变量和函数前,以表示变量或者函数的定义在别的文件中。
volatile:用于告知编译器其修饰的变量随时可能发生变化,每次使用它是必须从内存中重新取出。
=================================================
struct关键字
将一些相关联的数据打包成一个整体,方便使用。
结构体所占空间大小是其成员所占内存之和。
但是结构体
struct student{
}stu;
sizeof(stu)的值是多少?不是0,而是1。
因为编译器认为任何数据类型都有其大小。
struct和class关键字区别:
一般两者可以通用,但是有一个很小的区别,就是struct成员默认是public的,而class成员可以是private的。
struct和union关键字区别:
union维护足够多的空间来存放多个数据成员中的“一种”。而不是为每一个数据成员配置空间。
在union中所有的数据成员共用一个空间。同一时间只能存储其中一个数据成员。
所有的数据成员具有相同的起始位置。
对union成员的存取都是从联合体基地址的偏移量为0处开始的。
也就是说联合体的访问不论对哪个变量的存取都是从union的首地址位置开始的。
另外我们还可以使用union来判断当前系统是大端存储还是小端存储:
int checkSystem()
{
union check{
int i;
char ch;
}c;
c.i = 1;
return(c.ch == 1);
}
利用union数据类型的特点,所有成员的起始地址一样。
如果true,则ch是1,则说明是小端法;
如果false,则ch是0,则说明是大端法;
至于什么是大小端,可以查看我之前的文章:
何为大小端:https://www.cnblogs.com/grooovvve/p/10710270.html
=================================================
enum关键字
enum枚举与#define宏的区别
#define宏一次只能定义一个,而且不能调试,其原理只是在预编译阶段进行简单的替换而已;
enum一次可以定义大量相关的常量,可以调试,枚举常量是在编译时候确定其值的;
=================================================
typedef关键字
简单来讲就是可以给已经存在数据类型重新取名字;
很常用的情况就是给结构体重新取名;
标签:存在 定义 需要 volatile 静态变量 mes 存储 取出 union
原文地址:https://www.cnblogs.com/grooovvve/p/12381090.html