1、如何引用一个已经定义过的全局变量
答:extern可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变量,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在链接期间报错。
2、static全局变量和普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
答:全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式;这两者在存储方式上并无不同,这两者的区别在于非静态全局变量的作用域是整个源程序。当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中室友有效的,而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源文件的其它源文件中不能使用他,因为可以避免在其它源文件中引起错误。
2)从以上分析可以看出,把局部变量改变为静态变量后是改变了他的存储方式即改变了他的生存期。把全局变量改变为静态变量后是改变了他的作用域,限制了他的适用范围。
3)static函数与普通函数作用域不同仅在本文件。只有当前源文件中使用的函数应该说明为内部函数,内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包括这个头文件综上所述:static全局变量与普通的全局变量有什么区别:static全局变量只初始化一次,防止在其他文件单元中被引用;static局部变量和普通局部变量有什么区别:static局部变量只初始化一次,下一次依据上一次结果值;static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。
4、进程和线程的区别
答:线程是指进程内的一个执行单元也是进程内的可调度实体,与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的一个独立单位,线程不用有系统资源,但可以访问隶属于进程的资源(4)系统开销:在创建或撤销进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤销线程时的开销
5、Heap和Stack的差别
答:Heap是堆,stack是栈。Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。Stack空间有限,Heap是很大的自由存储区,C中的malloc函数分配的内存空间即为堆上C++中对应的是new操作符。程序在编译期对变量和函数分配内存都在栈上进行,切程序运行过程中函数调用时参数的传递也在栈上进行
6、什么是预编译,何时需要预编译
答:就是指程序执行前的一些预处理工作,主要指#表示的,合适需要预编译?1)总是使用不经常改动的大型代码体。
2)程序有多个模块构成,所有模块都使用一组标准的保函文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一预编译头。
7、关键字static有什么含义
答:1)定义静态局部变量,作用域从函数开始到结束,2)在模块内的static函数只可能被这一模块内的其他函数调用,这个函数的使用范围被限制在声明他的模块内;3)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝
8、关键字const有什么含义
答:1)表示敞亮不可以修改的变量。2)可以修饰参数,作为输出参数。3)修饰函数,防止以外的改动。4)修饰类的成员函数,不改变类中的数据成员。
好了,这就是上次面试题的答案了,由于这几天过于忙碌,所以耽误了点时间不好意思哈,不过总算是今天抽出了点时间来做了一个小小的总结希望对各位朋友有所帮助吧,好了明天基本上就没什么事了,可以继续更新了,未完待续,哈哈