- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- ISO∕IEC22989-2022信息技术 — 人工智能 — 人工智能概念和术语(中文版-雷泽佳译2024).docx VIP
- 云南省爱我国防知识网络竞赛活动初中组题库及答案.pdf VIP
- 综合管理部副部长竞聘演讲大纲.pptx VIP
- 福耀ai面试题库大全及答案.doc VIP
- 三一25吨吊车参数.pdf VIP
- 第11课《中国古代的民族关系与对外交往》课件.pptx VIP
- 美世国际职位评估体系IPE3.0使用手(excel自动计分表).xlsx VIP
- 七年级信息科技 个人隐私要保护 课件.pptx VIP
- 遥感和地理信息系统在吉林西部盐碱地管理中的应用研究.pptx VIP
- 道德与法治统编版三年级下册全册核心素养目标教案.docx VIP
文档评论(0)