C 简答题
1、从C语?执?效率?便,简述下C语?采取了哪些措施提?执?效率。(14分 or 20分)(年年考,?常重要)
①使?指针:有些程序?其他语?也可以实现,但C能够更有效地实现;有些程序?法?其它语?实现,如直接访问硬件,但C却可以。正因为指针可以拥有类似于汇编的寻址?式,所以可以使程序更?效。
②使?宏函数:宏函数仅仅作为预先写好的代码嵌?到当前程序,不会产?函数调?,所以仅仅是占?了空间,?使程序可以?效运?。在频繁调?同?个宏函数的时候,该现象尤其突出。函数和宏函数的区别就在于,宏函数占?了?量的空间,?函数占?了时间。
宏函数的例?:
③.使?位操作:位操作可以减少除法和取模的运算。在计算机程序中数据的位是可以操作的最?数据单位,理论上可以?"位运算"来完成所有的运算和操作。灵活的位操作可以有效地提?程序运?的效率。
④.循环嵌套中将较长循环设为内置循环,较短循环设为外置循环,以减少cpu跨切循环层的次数,提?程序的运?效率。(操作系统页?置换相关,减少页?置换次数)
⑤.将汇编指令嵌?到 C 语?程序中,汇编语?是效率最?的计算机语?,因此为了获得程序的?效率,可以在C语?程序中嵌?汇编,从?充分利??级语?和汇编语?各?的特点。
⑥.在C语?程序中可以调?系统API,接近底层,从?提?程序的运?效率。
⑦.?般情况下,C语?源程序中的每??代码.都要参加编译。但有时候出于对程序代码优化的考虑.希望只对其中?部分内容进?编译.此时就需要在程序中加上条件,让编译器只对满?条件的代码进?编译,将不满
?条件的代码舍弃,这就是条件编译
8、不检查数组下标
2、请简述C语?的隐式类型转换发?的四种情况,并说明每种情况如何转换。(注:这??还有个?题,float如何四舍五?转化成int)
算术运算式中,低类型能够转换为?类型。
赋值表达式中,右边表达式的值?动隐式转换为左边变量的类型,并赋值给它。
函数调?中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。
函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋给调?函数。
float a;
(int) (a + 0.5);
3、数组越界会产?什么后果?
越界访问有可能把数据放到已经存储了重要数据的内存单元,也就是改写了本来不许改写的数据,如果这个数据是系统的重要内容,有可能导致系统运?紊乱甚?是崩溃。当然如果这个数据并不重要,那么越界访问的后果就不明显或者是没有影响。避免的办法是对数组的下标严格检测,判断数组下标是否越界。?指针访问数组时要注意判断指针的指向是否已超过数组下标的最?值。
4、值传递和地址传递
值传递过程中,被调函数的形参作为被调函数的局部变量处理,即在内存的堆栈中开辟空间以存放由主调函数放进来的实参的值,从?成为了实参的?个拷贝。值传递的特点是被调函数对形参的任何操作都是作为局部变量进?,不会影响主调函数的实参变量的值。?在地址传递过程中,被调函数的形参虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。
5、C语?中,常量存储在哪??静态局部变量和静态全局变量存储在哪??
常量存储在常量区,静态局部变量和静态全局变量存储在全局数据区。