C语言面试题详解(1)
1.static有什么用途?
首先看看c程序的内存分布。
1)限制变量的作用域
2)设置变量的存储域(堆,主动分配内存也是堆)
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
全局变量储存在静态数据库,局部变量在栈。
3.堆栈溢出一般是由什么原因导致的?
堆栈溢出一般是循环的递归调用导致的,如果使用的大数据结构的局部变量,也可能导致堆栈溢出。
没有回收垃圾资源导致的是内存泄露最后内存耗尽。
5.写出float x 与“零值”比较的if语句。
因为float的精度是小学点的后六位,所以正确的比较语句是:
if(x<0.000001&&x>-0.000001)
6.将一个字符转化成整形的函数及其原型。
atol();
函数原型。
long atol(const char *nptr);
7.对一个频繁使用的短小函数,在C中应该如何实现?在C++中如何实现?
C中只能使用宏定义,c++中可以使用inline。
8.软件测试都有哪些种类:
黑盒测试:针对系统功能的测试。
白盒测试:测试函数功能和函数接口。
9.确定模块的功能和模块的接口是在软件设计的哪个阶段完成?
{
软件设计的流程:
1)市场调研
2)需求分析
3)概要设计
4)详细设计
5)编码
6)测试
7)维护
}
答:确定模块的功能和模块的接口是在概要设计阶段完成的。
10.
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
请问p1+5=? ;
p2+5=? ;
上述题目考查char的长度和long的长度。char的长度为1,long的长度为8.
而p1是一个地址,*p1才代表地址存放的值。而地址是16进制。
所以地址+5相当于地址的增加。0+5*1=5;0+5*4=20 = 014.
答:p1+5=0x801005 ;
p2+5=0x810014 ;
11.
请问下面程序有什么错误?
int a[60][250][1000],i,j,k;
for(k=0;k<1000;k++)
for(j=0;j<250;j++)
for(i=0;i<60;i++)
a[i][j][k]=0;
把循环语句内外换一下
(编译的时候没错,运行的时候出错,但这个数组太大,如果放在栈中,还是会溢出,要作为全局变量)
12. unsigned char 0 到 255
#define Max_CB 500
void LmiQueryCSmd(Struct MSgCB * pmsg)
{
unsigned char ucCmdNum;
......
for(ucCmdNum=0;ucCmdNum<Max_CB;ucCmdNum++)
{
......;
}
死循环(unsigned char 0 到 255)
13.
以下是求一个数的平方的程序,请找出错误:
#define SQUARE(a)((a)*(a))
int a=5;
int b;
b=SQUARE(a++);//a被加了2次 a=7,b=25
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。