1.static的全局变量与普通全局变量的区别?static的局部变量与普通局部变量的区别?static定义的函数与普通函数的区别?
static主要在三个方面不同:作用域、存储区域
static的全局变量与普通全局变量的区别
全局变量(外部变量)之前加上static就变成static全局变量。
都存在于静态数据区。两者的主要区别在于作用域不同,在源程序中,普通全局变量在其他源文件是可以使用的,但是static全局变量的作用域仅限于定义的源文件内。
static全局变量只初始化一次。
static局部变量与普通局部变量的区别
static局部变量 存在于静态数据区,而普通局部变量存在于栈中,动态申请的变量存在于堆中。static局部变量,只初始化一次,下一次函数运行时,还保存着上一次的值,而普通局部变量重新初始化。
static定义的函数与普通函数的区别
static函数与普通函数的区别在于作用域不同。static函数仅限于被源文件中其他函数调用。其他没有定义该static函数的源文件是不能使用的。
static函数只存在一份,普通函数在调用时维持一份拷贝。
2.static的作用至少说出两条
1)信息隐藏的功能
在一个源程序中,所有头文件和源文件都是可见的,而使用static,可以有隐藏功能
2)保持变量的持久性,因为存在静态数据区,在一个函数体内,作为一个静态的局部变量,即使函数已经用完,但是下次值还是可以继续使用
3)static作用默认初始化为0。其实静态数据区都是默认0。
3.struct与union有什么区别,以及应用场景
struct的成员都有独立的地址空间,地址空间的长度为每个成员长度的总和,当改变一个成员时,只改变该成员的值。用途非常广泛,表示一个对象,有很多属性的时候
union的成员是共享地址空间的,地址空间的长度为长度最大的成员的长度值,当改变时,值为最后一次成员改变的值。主要应用于嵌入式的寄存器控制,或者一个需要节省内存的时候。
4.全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
答:可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。
5.说出几种方式死循环
第一、 for(;;);
第二、while(1){}
第三、LOOP:
goto LOOP;
6. #ifndef 与 #pragma once的区别
#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况。
#pragma once则由编译器提供保证:同一个文件不会被编译多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。
方式一由语言支持所以移植性好,方式二 可以避免名字冲突