C语言面试题(带答案) 二

2019-03-28 09:56|来源: 网络

1.static有什么用途?(请至少说明两种)

1)限制变量的作用域

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

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


2、有一个16位的整数,每4位为一个数,写函数求他们的和。

解释:

整数1101010110110111

和  1101+0101+1011+0111

/* n就是16位的数,函数返回它的四个部分之和 */

char SumOfQuaters(unsigned short n)

{

   char c = 0;

   int i = 4;

   do

   {

       c += n & 15;

       n = n >> 4;

   } while (--i);

   return c;

}


3、两个字符串,s,t;t字符串接到s字符串尾,s字符串有足够的空间存放t字符串

void connect(char *s, char *t, int i)

{

char *q = t;

char *p =s;

if(q == NULL)return;

while(*p!='\0')

{

p++;

}

while(*q!=0)

{

*p=*q;

p++;

q++;

}

*p = '\0';

}

void main()

{

char p[7]="ABC";

char p2[]="EFG";

connect(p, p2,3);

printf("%s",p);

}

4、分析下面的代码:

char *a = "hello";

char *b = "hello";

if(a= =b)

printf("YES");

else

printf("NO");

常量字符串。位于静态存储区,它在程序生命期内恒定不变。如果编译器优化的话,会有可能a和b同时指向同一个hello的。则地址相同。如果编译器没有优化,那么就是两个不同的地址,则不同。对VC,是相同。


5、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?

答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。

这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

2) 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。                

3) static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

综上所述:

static全局变量与普通的全局变量有什么区别:

static全局变量只初使化一次,防止在其他文件单元中被引用;

static局部变量和普通局部变量有什么区别:

static局部变量只被初始化一次,下一次依据上一次结果值;

static函数与普通函数有什么区别:

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

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

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


7.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?

c用宏定义,c++用inline


8.软件测试都有那些种类?

黑盒:针对系统功能的测试    白合:测试函数功能,各函数接口

9.确定模块的功能和模块的接口是在软件设计的那个阶段完成的?

概要设计阶段


10、请找出下面代码中的所有错误 (题目不错,值得一看)

说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”  

#include"string.h"  

main()  

{  

char*src="hello,world";  

char* dest=NULL;  

int len=strlen(src);  

dest=(char*)malloc(len);    

char* d=dest;  

char* s=src[len];          

while(len--!=0)  

*d++=*s--;        

printf("%s",dest);

return 0;  

}  

答:

方法1:一共有4个错误;  

int main()

{

char* src = "hello,world";

int len = strlen(src);

char* dest = (char*)malloc(len+1);//要为分配一个空间

char* d = dest;

char* s = &src[len-1];          //指向最后一个字符

while( len-- != 0 )

*d++=*s--;

*d = 0;           //尾部要加’\0’

printf("%sn",dest);

free(dest);        // 使用完,应当释放空间,以免造成内存汇泄露

dest = NULL; //防止产生野指针

return 0;

}

方法2: (方法一需要额外的存储空间,效率不高.)不错的想法

#include <stdio.h>

#include <string.h>

main()

{

char str[]="hello,world";

int len=strlen(str);

char t;

for(int i=0; i<len/2; i++)

{

t=str[i];

str[i]=str[len-i-1]; //小心一点

str[len-i-1]=t;

}

printf("%s",str);

return 0;

}


书生整理于网络


相关问答

更多
  • 你这问题问得没水平了。。。找这类考试试题,你到书店转转,随便就能抓一大把,你挑本感觉最好的买下就可以了啊,不花几个钱。
  • 每个公司的面试题肯定都不一样啊 就是一个公司不同的考官,题也不一样啊
  • 某大公司的PHP面试题 管理提醒: 本帖被 haowubai 执行取消置顶操作(2009-07-30) 1. 如何用php的环境变量得到一个网页地址的内容?ip地址又要怎样得到? [php] echo $_SERVER ['PHP_SELF']; echo $_SERVER ['SERVER_ADDR']; [/php] 2. 求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数 [php] $begin=strtotime('2007-2-5'); $end=strtotime('20 ...
  • 各地不同
  • 面试题目(sql)[2022-05-24]

    我使用的是MySQL 如下语句: 建表语句: create table Lessoninfo( no int, week int, isonduty char); 插入数据:略 insert into Lessoninfo values(...............) SQL查询语句: select no as '教师号', sum(week=1) as '星期一',sum(week=2) as '星期二',sum(week=3) as '星期三' from Lessoninfo group by no; ...
  • 一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分) 提示:这里“零值”可以是0, 0.0 , FALSE或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为: if ( n == 0 ) if ( n != 0 ) 以此类推。 请写出 BOOL flag 与“零值”比较的 if 语句: 请写出 float x 与“零值”比较的 if 语句: 请写出 char *p 与“零值”比较的 if 语句: 二、以下为Wi ...
  • 一、判断题(每题1分,12 分,正确的√,错误的╳) 1.软件测试的目的是尽可能多的找出软件的缺陷。(√) 2.Beta 测试是验收测试的一种。(√) 3.验收测试是由最终用户来实施的。(√) 4.项目立项前测试人员不需要提交任何工件。(╳) 5.单元测试能发现约80%的软件缺陷。(√) 6.代码评审是检查源代码是否达到模块设计的要求。(√) 7.自底向上集成需要测试员编写驱动程序。(√) 8.负载测试是验证要检验的系统的能力最高能达到什么程度。(√) 9.测试人员要坚持原则,缺陷未修复完坚决不予通过。(√ ...
  • 我有一部分!
  • 基本就是些这 给你题库: 1. What letter is a body of water? 2. What is it that found in the every center of America and Australia? 3. Why is a river rich? 4. Which letter is very useful to a deaf woman? 5. Which runs faster, heat or cold? Why? 6.下面是一道经典的英语填空题,注意,所有空格均 ...
  • 因为自控能力较低,基础差 所以就非常会依赖答案,在网上是问不到答案的哈 这种情况反而要更需要独立思考 学习才能进步