C语言经典面试题
持续收集中...
1 数组名与一般的指针有哪些区别?
数组名是内存块的首地址,它是一个常量指针。使用sizeof测试数组时得到的数组所占的空间大小,即元素占的空间*数组长度。
2 inline函数的好处?
节省调用开销;相对于宏展开,inline发生在编译阶段,会做类型检查。
3 C语言中static关键字的作用?
作用于局部变量时: 叫静态局部变量,在函数调用时,只有在该函数第一次调用时才对其分配空间和初始化。在函数调用结束时,不对该变量的内存进行释放,值仍然保留。这也是于自动变量的区别。
作用于全局变量时:叫静态全局变量。表示该变量是私有的,只能在该文件使用。不能通过extern关键字对其引用。
作用于函数时:叫静态函数,表示该函数是私有的,只能在本文件中使用,不能通过extern关键字对其引用
4 C语言中volatile关键字的作用?
volatile本意是可变的,使用volatile声明的变量要求在被系统访问时总是重新从它所在的内存读取数据,使得编译器对访问该变量的代码不再进行优化,从而可以提供对特殊地址的稳定访问。
5 指针函数与函数指针的区别?
指针函数是指带指针的函数,即本质是一个函数,其返回类型是某一类型的指针;函数指针是指向函数的指针变量,即本质是一个指针变量。
6 左值与右值的区别?
左值指的是可以取地址的变量,左值与右值的根本区别在于能否获取内存地址。
7 大小端模式?
大端模式:是指数据的高字节保存在内存的低地址中;
小端模式:是指数据的高字节保存在内存的高地址中;
8 经常要操作的内存分为那几个类别?
栈、堆、全局区(静态区)、字符串常量区、程序代码区。
9 内存碎片是如何产生的?
内存碎片指的是系统中不可用的空闲内存,一般是由于内存对齐导致的。
10 野(wild)指针与悬空(dangling)指针有什么区别?如何避免?
判断一个double型数是否相等:if(fabs(a - b) < 1e-15);