C语言面试题目及答案.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

C语言面试题目及答案

1.基础语法题

题目:声明inta=10;后,变量a存储在内存的哪个区域?若将其改为constinta=10;,a的存储区域是否会变化?为什么?

答案:普通变量inta=10;若在函数内声明,存储在栈区;若在全局区域声明,存储在数据段(已初始化数据区)。

改为constinta=10;后,存储区域可能变化:全局const变量存储在只读数据段(.rodata),编译时会限制修改;局部const变量仍存储在栈区,但编译器会对直接修改操作报错(若通过指针间接修改,可能触发段错误,取决于系统内存保护机制)。本质是const限制的是编译期访问权限,而非绝对内存属性。

2.指针与数组题

题目:以下代码运行结果是什么?为什么?

#includestdio.h

intmain(){

intarr[5]={1,2,3,4,5};

int*p=arr;

printf(%d,%d\n,sizeof(arr),sizeof(p));

printf(%d,%d\n,*(arr+1),*(p+1));

//arr++;//这行代码是否能编译通过?为什么?

p++;

printf(%d\n,*p);

return0;

}

答案:

第一行打印:20,4(32位系统)或20,8(64位系统)。sizeof(arr)计算数组总字节数(5×4=20),arr是数组类型;sizeof(p)计算指针变量大小(与系统位数一致,32位4字节、64位8字节),p是指针类型。

第二行打印:2,2。arr+1与p+1均指向数组第二个元素(指针偏移量为sizeof(int)),解引用后得到2。

arr++;无法编译通过。arr是数组名,代表数组首元素地址的常量,不能被修改(常量无“自增”操作);而p是指针变量,可通过自增改变指向,p++后指向数组第二个元素,最后一行打印2。

3.内存管理题

题目:用malloc申请内存时,为什么要检查返回值?free(p)后,指针p会自动变为NULL吗?若不手动置NULL,可能导致什么问题?

答案:

检查malloc返回值的原因:malloc申请内存失败时会返回NULL(如内存不足),若不检查直接使用NULL指针,会触发段错误(程序崩溃)。示例正确用法:

int*p=(int*)malloc(4);

if(p==NULL){//必须检查

perror(mallocfailed);

return-1;

}

free(p)后,p不会自动变为NULL。free仅释放指针指向的内存,指针本身仍存储原内存地址(此时指针变为“野指针”)。

不置NULL的风险:后续若误操作野指针(如解引用、再次free),可能导致程序崩溃、内存corruption(破坏其他数据),且问题难以定位。正确做法是free(p)后立即p=NULL;。

4.函数与作用域题

题目:static关键字在修饰局部变量、全局变量、函数时,分别有什么作用?请举例说明差异。

答案:

修饰局部变量:延长变量生命周期(从“函数调用期间”变为“整个程序运行期间”),但作用域仍限制在函数内。

示例:

voidcount(){

staticintnum=0;//仅初始化1次,程序结束才释放

num++;

printf(%d,num);

}

intmain(){

count();//输出1

count();//输出2(num未被重置)

return0;

}

若去掉static,两次调用均输出1(局部变量每次调用重新初始化)。

修饰全局变量:限制变量作用域为“当前.c文件”,其他文件无法通过extern引用。避免多文件间同名全局变量的冲突。

示例:staticintg_val=10;(文件A中),文件B中externintg_val;会编译报错。

修饰函数:限制函数作用域为“当前.c文件”,其他文件无法调用该函数(类似“私有函数”)。

示例:文件A中staticvoidfunc(){},文件B中externvoidfunc();func();会编译报错。

5.字符串处理题

题目:实现一个函数intmy_strlen(constchar*str),计算字符串长度(不能使用库函数)。并说明为什么参数用cons

文档评论(0)

151****9429 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档