常见面试题汇总 —— C语言
面试的方向
- C 语言编程基础——初级
- C 语言编程基础——高级
- 数据结构与算法
- linux 基本操作
- 常用工具 —— git
C 语言编程基础——初级
预处理
1. 什么是预处理、熟悉那些预处理命令简单说一下
在编译之前对源文件进行简单加工的过程,就称为预处理。以#开头的命令为预处理命令。如文件包含命令#include、宏定义命令#define、条件编译#if等。
2. #与##的作用
#是把宏参数转化为字符串的运算符,##是把两个宏参数连接的运算符。
3. 如何避免头文件被重复包含
为避免头文件被重复包含,可在其中使用条件编译
#ifndef XXX // 或者ifdef XXX
#define XXX
// 代码块
#endif
4.#include 导入头文件时双引号" "和尖括号<>的区别
5. 预处理知识总结链接
- https://blog.csdn.net/m0_60337039/article/details/122980221?spm=1001.2014.3001.5502
关键字
1.static和extern关键字的使用特点
- static修饰的变量称为静态变量。其存储方式为静态存储方式,变量存储在静态全局区。
- 当static修饰局部变量时,变量的生命周期会被修改,在程序的整个运行过程中都不会被释放。但不会改变变量的作用域。
- 当static修饰全局变量时,会改变变量的作用域。被static修饰的全局变量只能在本文件中使用,在其他文件中不可以通过extern关键字进行声明后使用。因为全局变量存储在静态全局区,所以生命周期不会发生改变。
2.const 和 define 关键字的使用特点和区别
3.typdef 和 define关键字的使用特点和区别
关键字参考链接
http://c.biancheng.net/cpp/html/797.html
c语言中的作用域
1.在c语言编程中,编译器可以确认那几类不同类型的作用域
- 代码块作用域,即函数中花括号括起来的代码块。
- 文件作用域(全局作用域),任何在代码块之外声明的标识符都具有文件作用域。即默认为外部链接,可以用extern关键字声明使用
- 原型作用域,如函数声明。
- 函数作用域,只在当前函数内有效
储存方式
内部链接和外部链接
1.内部链接和外部链接的特点和区别
区别:在链接时,能否被其他的编译单元所访问
特点:
内部链接
1.在链接的时候其他的编译单元(被编译的文件如.c文件)无法链接到它且不会与其它编译单元中的同样的名称相冲突,如static修饰的全局变量和函数,不可以使用extern声明在其他的编译单元使用
2.内部链接变量是通过副本传递的,即可以使用文件导入的方式
外部链接
1.在链接的时候其他的编译单元可以访问它,即它可以和别的编译单元交互。 例如全局变量和函数默认就是外部链接, 可以通过extern引用。
静态链接库和动态链接库
数据类型
内存管理
1.什么是内存溢出,什么是内存泄漏。并说几个实例
内存溢出
指程序在申请内存时,没有足够的内存空间供其使用,或者是你要求分配的内存超出了系统能给你的,系统不能满足需求出现内存溢出
实例:
- 比如申请了一个int类型的4字节空间,但给它存了long类型8字节才能存下的数。
- 使用malloc函数在堆空间开辟1000个字节大小的空间,但在堆空间中没有这么大的空间。
内存泄露
指程序在申请内存后,无法释放已申请的内存空间。如使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序没有调用相应的函数free或delete释放该内存块。一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。内存泄露会最终会导致内存溢出!
实例:
- 常发性内存泄漏:发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。如for/while中的内存泄漏
- 偶发性内存泄漏:发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。如if/switch中的内存泄漏
- 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
- 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。
注意:
内存泄漏本身不会产生什么危害,真正有危害的是内存泄漏的堆积,这会最终消耗尽系统所有的内存。
c程序编译过程
1.C代码编译生成可执行程序的过程有哪几个步骤,各步骤都具体做了什么
将c文件编译生成可执行程序需要经过预处理->编译->汇编->链接四个步骤,如下图
- 预处理:处理所有以#开头的预处理命令,并去掉注释
- 编译:使用编译器将预处理文件test.i编译成汇编文件test.s。
- 汇编:使用汇编器将汇编文件test.s转换成目标文件test.o。
- 链接:使用链接器将该目标文件与其他目标文件、库文件、启动文件等链接起来生成可执行文件。
大端和小端
数组和指针
指针常量与常量指针
指针数组和数组指针
指针函数和函数指针
参考链接:https://blog.csdn.net/gaoxiaowei/article/details/2814295
函数
C 语言编程基础——高级
文件读写
进程与线程
数据结构与算法
数据结构
算法
1.如何衡量一个算法的好坏
算法的好坏取决于两个维度,一个是时间效率,即时间复杂度,另一个是空间效率,即空间复杂度。
- 时间复杂度:算法中的基本操作的执行次数,为算法的时间复杂度。
- 空间复杂度:空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。
时间复杂度的计算:因为在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间,一个算法执行所耗费的时间,需要你的程序放在机器上跑起来,才能够知道。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度
参考链接:https://blog.csdn.net/qq_49613557/article/details/115301174
linux 基本操作
常用工具 —— git
常见面试题汇总 —— C语言相关推荐
- java中级程序员面试题_中级Java程序员常见面试题汇总
下面是一些中级Java程序员常见面试题汇总,你可以用它来好好准备面试. 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器 ...
- for vue 一行2列_vue常见面试题汇总
点击"卓跃教育",选择"星标?" 在看|星标|留言, 真爱 今天跟大家分享下Vue常见面试题的知识. 1.vue优点? 答:轻量级框架:只关注视图层,是一个构 ...
- 简述isodata算法的原理_算法常见面试题汇总(一):概率论与数理统计部分
初级或中级算法岗面试题主要有四类:数理统计基础.机器学习模型原理.编程能力.项目经验.项目经验因人而异,所以仅总结前三个方面的基础知识,分享给朋友.(高级或资深算法岗面试内容不在本文范围内) 1.大数 ...
- Linux运维常见面试题汇总
Linux面试题 一.填空题 1. 在Linux 系统 中,以文件方式访问设备 . 2. Linux 内核引导时,从文件/etc/fstab中读取要加载的文件系统 . 3. Linux 文件系统中每个 ...
- Linux系统运维常见面试题汇总
一.填空题 1. 在Linux 系统 中,以文件方式访问设备 .2. Linux 内核引导时,从文件/etc/fstab中读取要加载的文件系统 .3. Linux 文件系统中每个文件用indoe节点来 ...
- Hive常见面试题汇总
一.Hive架构介绍. 遇到这类问题,可以灵活的去回答,比如可以结合平时使用hive的经验作答,也可以结合下图从数据的读入.解析.元数据的管理,数据的存储等角度回答: 1.Meta Store Met ...
- 2020 Java常见面试题汇总
1-10期 [10期]Redis 面试常见问答 [09期]说说hashCode() 和 equals() 之间的关系? [08期]说说Object类下面有几种方法呢? [07期]Redis中是如何实现 ...
- while循环中指针会自动释放吗_C++】C++常见面试题汇总_持续更新中...
1:指针(*).引用(&).解引用(*).取地址(&).的概念和区别 概念: 指针指向一块内存,指针保存的是内存的地址:引用是变量的别名,本质是引用该变量的地址. 解引用是取指针指向的 ...
- Python常见面试题汇总(根据面试总结)
Redis: Redis缓存击穿.缓存雪崩.缓存重建 回答参考: 缓存击穿: 当一个连接访问缓存数据库中不存在的数据时,会直接通过缓存数据库到后端数据库中查找数据,但如果有大量连接在查询一个不存在的数 ...
- 面试准备:操作系统常见面试题汇总
文章目录 1.为什么要有用户态和内核态?内核态和用户态的运作方式? 2.进程间通信方式介绍 3.Linux查看进程状态.cpu状态.占用端口的进程号的命令?linux top命令VIRT,RES,SH ...
最新文章
- 计算机接口与通信技术考试题,全国2010年10月自学考试计算机通信接口技术试题...
- java i18n 转换,Java的国际化支持(I18N问题)
- 图文解读助你理解和使用正则表达式
- 浅析基于双目视觉的自动驾驶技术
- Qt Assistant快速指南
- Servlet与缓存
- 工具资源系列之给虚拟机装个windows
- php strlen遇0截断,聊下php下的截断问题
- 理论基础 —— 队列 —— 链队列
- hbase 客户端_读《HBase权威指南》 客户端API:基础知识
- 职场中显情商低的三种行为
- Internet Explorer无法下载
- 同花顺 行情服务器系统,[分享]完美运行同花顺,Linux下的股友有福了
- P4173 残缺的字符串(FFT)
- 搜狗浏览器查看账号密码
- api接口—淘宝搜索
- 转载:主外键关联删除(on delete set null和on delete cascade)
- 秉火429笔记之八 RCC时钟
- java 解析hiveserver2日志 解析HiveSQL 获取表的使用次数 热度
- 优信二手车与时俱进坚持创新