C语言面试题

来源:互联网 发布:凸优化理论与应用 编辑:程序博客网 时间:2024/05/22 10:45

一. 全局变量与局部变量

1. 局部变量能与全局变量重名,但局部变量会屏蔽全局变量,若要使用全局变量,需要使用“::”。在函数内引用这个变量时,会使用到局部变量,而不是全局变量。

2.可以引用已经定义过的全局变量,一个使用关键词extern,一个使用引用头文件的方式。使用关键词extern,全局变量编写错误,在连接期间报错,而另外一种在编译期间报错。
3.全局变量头文件中可以定义在多个.C文件包含的头文件中,在不同的C文件中以static形式来声明同名全局变量,可以在不同的C文件中声明同名的全局变量,但是只能有一个C文件对该全局变量进行初始化赋值,否则会连接错误。
4.程序的局部变量存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据存在于(堆)中。
5.
(1)static全局变量与普通的全局变量的区别:static全局变量只初始化一次,防止在其他文件单元中被引用;
(2)static局局变量与普通的局局变量的区别:static局部变量只被初始化一次,下一次依据上一次结果值;
(3)static函数与普通函数的区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。
6.队列先进先出,栈先进后出。
7.对于一个频繁使用的短小函数,在C语言中应用用宏定义实现。
8.确定模块的功能和模块的接口是在软件设计的概要设计阶段完成的。

9.线程是进程内的一个执行单位,也是进程内的可调度实体。线程与进程的区别:

(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位;

(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行;

(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源;

(4)系统开销:在创建或撤销进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤销线程时的开销。

10.Heap是堆,Stack是栈。Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。Stack空间有限,Heap是很大的自由存储区。C语言中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也是在栈上进行。

11.预编译就是指程序执行前的一些预处理工作,主要指#表示的。在以下两种情况下需要预处理:(1)总是使用不经常改动的大型代码体;(2)程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。可以将所有包含文件预编译为一个预编译头。

12.关键词const的含义:

(1)表示常量不可以修改的变量;

(2)可以修饰参数,作为输入参数;

(3)修饰函数,防止以外的改动;

(4)修饰类的成员函数,不改变类中的数据成员。

13.浅拷贝和深拷贝区别是什么:深拷贝拷贝的是内容,浅拷贝拷贝的是指针。深拷贝和浅拷贝最大的区别就是子类对象的地址是否改变,如果子类对象的地址改变那么就是深拷贝。简单的来说就是,在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误。


0 0
原创粉丝点击