C语言面试题

C语言经典面试题:

1.可以做switch()的参数类型是:

答:只能是int和char型。

2.写出float X与零值比较的if语句

答:if(x>-0.000001&x<0.000001)

3.C语言中将一个字符转换成整数的函数是哪个?写出这个函数的原型

答:函数:atol()

    功能:把字符串转换成长整型

    原型:long atol(const char *nptr)

示例:

#include<stdio.h>

int main()

{

  long lNum=0;

  char *str="12345";

  lNum=atol(str);

  printf("String=%s integer=%d\n",str,lNum);

  return 0;

}

4.unsigned char *p1=(unsigned char *)0x801000;

  unsigned long *p2=(unsigned long *)0x810000;

  p1+5=?,p2+5=? 

答:p1+5=0x801005,p2+5=0x810014;

5.求值:int aNum=5,bNum=0;

        bNum=(aNum++)(aNum++);

        aNum=?,bNum=?

答:aNum=7,bNum=25

6 一16位整数1101010110110111,每四位为一个整数,写函数求值

答:char sumFunc(unsigned short num)

    {

      char ch=0;

      int  iCount=4;

      do{

           c+=n&15;

           n>>4;

         }(while--i);

     return 0;

     }

7.编程实现两个字符串s和t,把t字符串拼接到s字符串尾,s字符串有足够的空间存放t字符串

void strConnect(char *s,char *t,int n)

{

  char *p=s;

  char *q=t;

  if(q==NULL)

     return;

  while(*p!='\0')

     p++;

  while(*q!='\0')

  {

     *p=*q;

      p++;

      q++;

   }

   *p='\0';

}

void main()

{

   char cArray1[10]="abcde";

   char cArray2[3]="xyz";

   strConnect(cArray1,cArray2,3);

   printf("%s",cArray1);

}
8.static全局变量与普通全局变量的区别,static局部变量与普通局部变量的区别,static函数与普通函数的区别。

答:1.非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的,而静态全局变量(只初始化一次)限制了其作用域,只在定义该变量的源文件内有效,同一源程序的其它源文件都不能使用它。

    2.static局部变量(只初始化一次)存储在静态区,普通局部变量存储在栈中,存储方式不同。

    3.static函数在内存中只有一份,普通函数在每个被调用中都维持一份拷贝。

9.char a;

  char *str=&a;

  strcpy(str,"hello");

问这段代码有什么问题?

答:没有为str分配内存空间,将会发生异常,将一个字符串复制进一个字符变量指针所指指针,虽然可以正确输出结果,但因为越界进行内在读写导致程序崩溃。

posted @ 2017-06-27 13:33  浅恋湾  阅读(690)  评论(0编辑  收藏  举报