当前位置: 首页 > news >正文

c语言面试题常见易错,易混淆,比较难区分汇总

常见易错,易混淆,比较难区分的关键点:
1.关键字共有32个,如下:
char、double、enum、float、int、long、short、signed、struct、union、unsigned、void、for、do、while、break、continue、if、else、goto、switch、case、default、return、auto、extern、register、static、const、sizeof(不是函数,特别注意)、volatile
易考关键字:static、const、volatile、sizeof、extern
2.C语言程序的一般结构有那 些?
顺序,分支,循环
3.简单列举几种常用的循环结构和分支结构
循环:For,while do,if goto。分支:if else, switch case(注意default 的使用,和break 的添加)。
4.whiledo while有何区别?
前者先判断再执行,后者先执行再判断;后者比前者多执行一次。
5.continuebreak有何需别?
前者结束本次循环继续下次循环,后者直接推出循环。
6.register有何作用?
声明一个变量常驻寄存器,以达到提高程序运行效率的目的,在嵌入式开发中尤其常用,但它是一个建议性的声明,编译器会根据程序情况决定是否申请成功。
7.static有何作用?
两方面:1)限定存储域;2)限定作用域。
8.volatile关键字有什么用途?
声明为一个异变的变量,一般的变量会暂存在处理器的缓存区中,当内存中变量发生改变时处理器可能无法及时更新其变量的值导致灾难,在嵌入式开发中尤其重要,也可达到防止编译器优化的目的。
9.指针函数函数指针有和区别?
概念不同,前者是一个函数返回值为指针类型;后者为一个指针,指向一个函数入口地址。
10.简述0,‘0’,“0”,’\0’的区别。
分别为数值0,字符0(ascii码数值为48),字符串0(占两个字节,有‘\0’作为结束符),字符串结束标志(其数值等于0是绝对的0,但意义不同)
11.使用
gets
时应注意哪些事项?
防止越界,gets不检查目的地址的空间大小。
12.简述堆和栈的区别:
前者为程序动态分配,创建和销毁都需要手动完成(使用完一定要销毁,防止内存泄露);后者为系统自动分配,在函数返回时自动销毁(所以不能在函数中返回变量)。
13.函数传参有哪些方法?各有什么特色?
值传递和地址传递,前者在传递时函数形参接受实参的拷贝,所以原形参不会被改变(但是大数据的拷贝会降低效率);后者传递变量的地址,不需拷贝,但是会改变参数的值。
14.全局变量和局部变量有何区别?
前者在静态区,作用域是整个程序;后者在栈区,作用域仅限于函数内部。
15.局部变量能否和全局变量重名
可以,局部变量会屏蔽全局变量。
16.静态全局变量和普通全局变量有何区别?
存储域方面:都相同,都在静态区;作用域方面:不同,前者是本文件,后者是全局可见。
17.静态局部变量和普通局部变量有何区别?
存储域:相同,都在静态去;作用域:相同,都在函数内部;
但是声明周期不同,前者声明周期为整个程序的声明周期知道程序推出自动消亡;后者声明周期为一次函数调用,函数返回即销毁。
18.地址对齐方式有哪几种?
字节对齐,半字对齐,字对齐
19.结构体对齐大小的计算
struct a{
char a;
int b;
short c;
}
Sizeof(a) = ?
结构体a的大小是4*3=12个字节,而不是1+2+4=7个字节;这里主要考察内存对齐(地址对齐)的特点,应为结构体中最大数据宽度是整型(4字节),所以按字对齐。
关于内存对齐的题目,在我博客中我会详细说明的。
21.结构体和联合体的区别?
结构体struct
各成员各自拥有自己的内存,各自使用互不干涉,同时存在的,遵循内存对齐原则。一个struct变量的总长度等于所有成员对齐的长度之和。
联合体union
各成员共用一块内存空间,并且同时只有一个成员可以得到这块内存的使用权(对该内存的读写),各变量共用一个内存首地址。因而,联合体比结构体更节约内存。一个union变量的总长度至少能容纳最大的成员变量,而且要满足是所有成员变量类型大小的整数倍。不允许对联合体变量名U2直接赋值或其他操作。
22.宏函数与内联函数和普通函数的执行效率的比:
宏函数效率高,因为是编译器在预处理阶段的替换;
23.C语言中注释有哪些方法
/**/和 #if 0 #endif 。后者是预处理命令,可以方便的对代码区进行选择编译。
24.解释一下语句的含义:
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
前两个的作用是一样,a是一个常整型数。
第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。
第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。
最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。
也许你可能会问,即使不用关键字const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?理由如下:
1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。
2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。
25.头文件中的 ifndef/define/endif 干什么用?
答:防止该头文件被重复引用。
26.#include <file.h> 和 #include “file.h” 有什么区别?
对于#include <file.h> ,编译器从标准库路径开始搜索 file.h
对于#include “file.h” ,编译器从用户的工作路径开始搜索 file.h

http://www.jsqmd.com/news/1281703/

相关文章:

  • 百度之星 Diversity (简单树形dp)
  • 2026南阳商丘信阳梁柱墙体加固房屋改造盘点 - LYL仔仔
  • JavaAgent技术之添加注解
  • 物联网安全:SE050与PIC18F46K22硬件加密方案
  • 2026武进二手设备回收公司推荐|化工厂拆除回收公司哪家好|君东环保一站式回收服务 - geo88
  • 呼叫中心CRM对接实战:API联动原理、来电弹屏、数据同步与业务闭环落地方案
  • 一键备份QQ空间所有历史说说:GetQzonehistory完整指南
  • 免费在线GPX编辑器:3分钟学会专业GPS轨迹编辑技巧
  • PAT甲级 1061 Dating 模拟+字符串
  • AI普通话智能评测系统:核心技术解析与应用实践
  • MYSQL中union的用法
  • Gitee本土化优势与开发者实战指南
  • 3步掌握:国家中小学智慧教育平台电子课本批量下载终极指南
  • Matlab实现两阶段P2G能源转换建模与优化
  • 北京宝藏回收店|合扬名包变现体验:快、稳、值 - 日常财经早知道
  • APP运营如何才能增强用户粘性
  • 元素垂直居中
  • Windows 10运行Android应用终极指南:WSA-Windows-10逆向移植项目详解
  • PAT树的深度优先搜索(dfs)和广度优先搜索(bfs)
  • Karpathy 65行提示词:重构AI编程协作流程,提升代码质量与效率
  • 大模型应用开发的工程化路线:从实验到生产的七个里程碑
  • Google发布网络安全报告 工具堆够用了吗
  • 杭州西湖区漏水检测维修一站式服务 - 本地正规防水补漏公司精选推荐(2026 最新)全域上门:卫生间 / 厨房 / 阳台 / 屋顶渗漏水免砸砖检测维修补漏全攻略 - 吉林同城获客
  • 卡文断更怎么办?10款高效写小说软件横评(含防踩雷指南)
  • 发票、凭证和对账单怎么整理成 Excel?先定义字段,再逐项复核
  • 云南24小时道路救援公司推荐,汽车搭电救援公司哪家好?2026年7月富宁美星服务网点信息核对指南 - geo88
  • 如何高效应用Poppins字体:面向初学者的完整实践指南
  • 通用AI与垂直领域融合的技术实践与优化
  • 张家港上门回收废品公司推荐,汽车电池回收公司哪家好避坑指南:4个常见坑+5条硬标准,2026靠谱公司推荐 - geo88
  • 微前端框架 2026 选型对比:qiankun 的沙箱困境、Module Federation 的共享模型与 wujie 的降级智慧