C语言面试题详解(1)

1.static有什么用途?

首先看看c程序的内存分布。


1)限制变量的作用域

2)设置变量的存储域(堆,主动分配内存也是堆)

1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
    2)
在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
    3)
在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

2.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?

全局变量储存在静态数据库,局部变量在栈。

3.堆栈溢出一般是由什么原因导致的?

堆栈溢出一般是循环的递归调用导致的,如果使用的大数据结构的局部变量,也可能导致堆栈溢出。
 
没有回收垃圾资源导致的是内存泄露最后内存耗尽。


4.不能做switch()的参数类型是:实型。(只能是int,或者char)。


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




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。