您的位置:首页 > 其它

笔试常见的简答题(不断更新)

2018-03-26 22:08 211 查看
一,关键字static的作用
答:声明一个全局变量,局部变量或函数,使得被声明的值,可以再子函数和主函数之间使用,而不会被释放,知道整个程序结束。(延长了生命周期),修饰全局变量或函数时只能在本文件使用。
二,局部变量和全局变量是否可以重名?
答:可以重名,在函数中引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
三,static全局变量和普通全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数和普通函数有什么区别?
答:static全局变量只能初始化一次,防止被其他文件单元引用。static函数与普通函数作用域不一样,static函数在内存中只有一份。static局部变量只能被初始化一次,下次依据上一次的结果值。
四,程序内存分配,即一个由c++编译的程序占用分为几个部分?
答:栈区,堆区,静态区,程序代码区,文字常量区。
五,解释堆和栈的区别?
答:栈:由系统自动分配释放,存放函数的参数值,局部变量的值。
    堆:一般由程序员分配释放,也可以由os回收。

六,系统调用和库函数调用的区别?
答:系统调用:运行在内核模式,在用户和内核上下文环境间切换,开销较大。数量少(90个左右),是操作系统的一个入口点。
    库函数调用:运行在用户模式,开销小(数量较多),用于普通功能函数的调用。

七,sizeof和strlen的区别?
答:1,strlen计算字符串的具体长度(只能是字符串),不包括字符串结束符。返回的是字符个数。
    2,sizeof计算声明后所占的内存数(字节大小),不是实际长度。
    3,sizeof是一个取字节运算符,而strlen是个函数。
    4,sizeof的返回值=字符个数*字符所占的字节数,字符实际长度小于定义的长度,此时字符个数就等于定义的长度。若未给出定义的大小,分类讨论,对于字符串数组,字符大 小等于实际的字符个数+1;对于整型数组,字符个数为实际的字符个数。字符串每个字符占1个字节,整型数据每个字符占的字节数需根据系统的位数类确定,32位占4个字节。     

5,sizeof只做计算不做运算。
八,C语言分配内存的方式有哪些?C语言常见的内存错误有哪些?
答:1,静态存储区分配(编译时分配,在整个运行期间存活)例:全局变量,static变量
    2,栈上分配:局部变量(效率高,但分配内存有限)

    3,从堆上分配:(动态内存分配,malloc,new申请)。注意用free和delete释放
  常见错误:1,内存未分配成功,却使用了它。                      2,引尚未初始化的指针。                      3,越界操作内存。                      4,忘记释放内存,造成内存泄漏。九,什么是野指针?如何避免野指针?答:野指针:通常因为指针变量中保存的值不是合法的内存引起的。    避免方法: 1,用malloc申请了内存后,应该立即检查指针是否为NULL,防止使用的值为NULL指针。                      2,动态申请操作必须和释放操作匹配,防止内存泄漏和多次释放同一内存空间。
                      3,牢记数组长度,防止数组越界操作,考虑使用柔性数组。
十,分别写出bool,int,float,指针类型的变量a与“零”的比较语句?答:Bool:if(!a) or if(a)       int:if(a == 0)
       float:const EXPRESSION EXP = 0.000001
                 if(a < EXP && a > -EXP)
        pointer: if(a !=NULL) or if(a == NULL)
十一,关键字const是什么含意,有什么作用?答:const修饰的类型数据是指常类型。    1, 定义const常量,具有不可变性 。
    2,便于进行类型检查。
    3,保护被修饰的东西,防止被意外修改。
    4,提高效率,编译器通常部位const变量分配存储空间,而是保存在符号表中。
十二,说出const与#define相比,有何优点?答:1,可以节省空间,避免不必要的内存分配。       2,const定义变量从汇编的角度来看,只是给出了对应的内存地址,而不像#define一样给出的是立即数,所以定义的常数在程序运行中只有一份拷贝,而#define定义的常量在内存有若干个拷贝。
十三,什么是预编译?何时进行预编译?答:指在程序源代码被翻译为目标代码的过程中,生成二进制代码之前的过程。       预处理是做代码文本的替换工作,处理#开头的指令,比如#include包含的文件代码,#define定义的替换,条件编译等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  笔试题 关键字