C语言面试常见问题

C语言面试常见问题总结 一、列举一个指针跑飞的例子: 1、 意外中断。是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象。 2. 中断变量处理不妥。若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。 3. 地址溢出,常见错误为指针操作错误。我要着重说的是数组下标使用循环函数中循环变量,如果循环变 阅读详情

1、如何在不开辟新的内存空间的情况下,交换两个变量的值。

可以使用加减法,例如:按此步骤(1)a=a+b (2)b=a-b (3)a=a-b

在这里不开辟新的变量,就不会开辟新的内存空间

2、全局变量和局部变量在内存中的区别

(1) 生命周期

全局变量:要在程序运行结束后才会撤销,内存才会释放

局部变量:只在其所在函数的执行期间存在,函数调用了一次后,局部变量就会撤销,所占内存空间也会被释放。

(2) 作用范围

全局变量:全局作用域,只需要在一个源文件中定义,就可以作用于所有源文件

局部变量:只在它所在的函数或者循环内起作用

(3) 内存中的位置

全局变量:存在于内存中的全局区(静态区)

局部变量:内存中的栈区

3、队列和栈的区别

队列:先进先出,rear进队,front出队

栈:先进先出,只有一个口供出入

4、局部变量和全局变量重名的影响

1) 在局部变量定义的函数中,局部变量会屏蔽全局变量,以局部变量为主

2) 在局部变量定义的函数外,变量值以全局变量为主

5、如何在其他文件中引用一个已经定义过的全局变量

(1) 引用头文件的方式

可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件对此变量赋处置,此时的连接不会出错。

(2) 关键字

使用extern关键字

6、全局变量可定义在头文件中,供多个C语言文件使用,但不建议

1) 引用该变量的文件要先用extern声明。

2)但这样做,当该头文件被多个C文件包含时,都会对该变量定义一次,会导致重复定义。

3) 建议在一个特定的C文件中定义,然后在特定的头文件中使用extern声明,需要使用时就包含该头文件。

7、do…while和while…do的区别

1) do…while无论条件是否成立,都会先执行循环语句,即至少执行一次

2) while…do则是先判断执行条件,成立后在执行循环体,可能一次也不执行

8、gcc编译的过程

主要分为4个阶段:预处理、编译、汇编、链接

(1) 预处理:

1) 头文件展开:几行的hello.c变成上千行的hello.i

2) 宏定义替换:宏名替换为宏值

3) 删除注释:注释只是给人看的

4) 条件编译:可避免头文件被重复包含

(2) 编译

hello.i编译得到汇编文件(.s)hello.s

(汇编指令是最接近于机器语言的语言)

(3)汇编

hello.s执行汇编操作生成目标文件(.o)hello.o

(汇编指令被翻译成了二进制的及其指令)

(4)链接

Hello.o经过链接得到hello.exe(可执行文件)

9、各变量类型所占的字节

可以先区分下操作系统和编译器软件位数上的区别

1) 操作系统上的位数区别:

32位操作系统一次最多处理32位的数据;寻址空间有2^32,也就是最多可以有4G的内存。

64位操作系统一次最多处理64位的数据;寻址空间有2^64,最多可以支持128G的内存。64位操作系统意味着其cpu拥有更大的寻址能力。但这也需要在64位操作系统上运行的软件也是64位的。

2)编译器

软件中数据类型的字节数大小与操作系统多少位却并没有关系,而是由编译器决定的。数据结构占多少位取决于在软件编译时选择的是64位还是32位,其具体占位数编译器已经决定了,可见下表。

不同类型所占字节数:

类型

32位编译器

64位编译器

char

1

1

int

4

4

float

4

4

double

8

8

Short int

2

2

long int

4

8

long long int

8

8

char *

4

8

char*(即指针变量): 4个字节,占32位。

10、对数组的使用

(1)数组名

数组名作为类型时,代表的是整个数组的大小

数组名作为地址时,代表的是数组首元素的地址

对数组名取地址时,代表的是数组的首地址

(2)具体使用

例:int arr[5] = {1, 2, 3, 4, 5};

1) 赋值:int arr[5] = {1, 2, 3};此时:arr数组的值为{1,2,3,0,0}

2) 获取首元素地址:arr、&arr [0]、(arr+0)

3) 获取数组地址:&arr

4) 获取数组其余元素地址:arr+n

5) 获取数组其余元素值:arr[n]、*(arr+1)

11、static作用于全局变量、局部变量、函数后与普通的区别。

全局变量前加上static后就变成了静态的全局变量

1) 非静态全局变量作用域为整个源程序,当源程序由多个源文件组成时,非静态全局变量在各个源文件中都有效。

2) 静态全局变量则是被限制了作用域,只在定义该变量的源文件中有效

12、程序内存分配的存储段

可执行程序主要分为以下三部分

(1) 数据段

存放已初始化的全局变量和静态变量,属于静态内存分配

(2) 代码段

用于存放程序的代码内存空间,大小在程序运行前就已经确定。该区域只能读不能些,在代码段中可能也包含了一些只读的常熟变量,例如字符串常量等。

(3) BSS段(Block Started by Symbol)

存放未初始化的全局变量和静态变量。该区域可读写,由链接器从可执行文件中得到BSS段的大小,然后申请得到这块内存,该内存跟在数据段后面,并不占用可执行文件的大小。属于静态内存分配。

13、内存分配方式及区别

(1) 静态存储区分配内存

如全局变量和静态变量,内存在程序编译时已分配好,并在程序运行期间一直存在。

(2) 栈区分配内存

执行函数时,函数内部的局部变量的存储单元在栈上创建,函数结束时,这些内存就会被自动释放。

(3) 堆区分配内存

也称动态分配内存。程序运行时用malloc函数申请任意大小的内存,不用时由free释放。

14、数组与指针的区别

数组:

1) 可存储连续多个相同类型的数据

2) 只能一个一个的单个元素赋值,或者整个数组赋值

3) 连续存储空间

4) 作为参数时,数组名自动退化成同类型的指针

指针:

1) 指针变量名,存储的是地址,加上地址符可访问存储的地址中的变量值

2) 对指针变量赋值时,可以使存储地址不变,只改变存储的数据值

15、“引用”与指针的区别

(1)指针本身是一个地址,需要分配内存空间,使用指针访问一个变量是间接访问。

(2)引用是变量的别名,一般用来作为函数的参数或者函数的返回值,不需要分配内存空间。引用访问一个变量是直接访问。

嵌入式软件C语言面试常见问题及答案解析(二) 面试是每一个求职者不能避免的一关,面试的好与不好直接决定了能不能被录用以及录用后的薪资,作为嵌入式相关工作的面试,C语言是一个最基础也是最重要的面试内容,想要表现良好那就需要面试者有深厚的编程基础和丰富的实战经验,以及洞察一些的火眼金睛。本文归纳整理总结曾经在面试中遇到的问题以及一些高频的C语言面试题目,给予面试者在需要的时候锻炼己身,正确拿下心仪的OFFER。 阅读详情

相关推荐

嵌入式软件C语言面试常见问题及答案解析(一)

面试是每一个求职者不能避免的一关,面试的好与不好直接决定了能不能被录用以及录用后的薪资,作为嵌入式相关工作的面试,C语言是一个最基础也是最重要的面试内容,想要表现良好那就需要面试者有深厚的编程基础和丰富的实战经验,以及洞察一些的火眼金睛。本文归纳整理总结曾经在面试中遇到的问题以及一些高频的C语言面试题目,给予面试者在需要的时候锻炼己身,正确拿下心仪的OFFER。

青椒*^_^*凤爪爪的博客 1803

两个变量交换内容不开辟新的空间

假设有int a = 10; int b = 30; 现在要交换这两个数,但是要求不能使用第三个变量。 方法一://存在溢出的风险,还没搞明白 int a = 10; int b = 20; a = a+b; b = a-b; a = a-b; 方法二:异或^(两个变量的内存地址不能相同,下面情况当然不可能相同,但在嵌套循环遍历同一个数组的时候,使用这种交换方式就可能遇到,int i 和 int j 是同一个数组的同一个位置变量的情况,这个时候arr[i] 和 arr[j]表示的是同一个数,其内存地址

qq_43130076的博客 346

嵌入式软件C语言面试常见问题及答案解析(五)

面试是每一个求职者不能避免的一关,面试的好与不好直接决定了能不能被录用以及录用后的薪资,作为嵌入式相关工作的面试,C语言是一个最基础也是最重要的面试内容,想要表现良好那就需要面试者有深厚的编程基础和丰富的实战经验,以及洞察一些的火眼金睛。本文归纳整理总结曾经在面试中遇到的问题以及一些高频的C语言面试题目,给予面试者在需要的时候锻炼己身,正确拿下心仪的OFFER。

青椒*^_^*凤爪爪的博客 1538

两数交换 [不开辟新空间,即额外空间复杂度为O(1)]

两数交换 [不开辟新空间,即额外空间复杂度为O(1)] 1.先上结论 我们采用位运算 按位异或 符号为:“^” 来进行运算 int a=5,b=9; a=a^b; b=a^b; a=a^b; System.out.println("a="+a);//a=9 System.out.println("b="+b);//b=5 2.按位异或的性质 ✔① 0 ^ a = a; ✔② a ^ a = 0; ✔③ 满足交换律、结合律 a ^ b = b ^ a; a ^ b ^ c = a ^ ( b^

m0_62857950的博客 372

嵌入式软件C语言面试常见问题及答案解析(三)

面试是每一个求职者不能避免的一关,面试的好与不好直接决定了能不能被录用以及录用后的薪资,作为嵌入式相关工作的面试,C语言是一个最基础也是最重要的面试内容,想要表现良好那就需要面试者有深厚的编程基础和丰富的实战经验,以及洞察一些的火眼金睛。本文归纳整理总结曾经在面试中遇到的问题以及一些高频的C语言面试题目,给予面试者在需要的时候锻炼己身,正确拿下心仪的OFFER。

青椒*^_^*凤爪爪的博客 1957

嵌入式软件C语言面试常见问题及答案解析(四)

面试是每一个求职者不能避免的一关,面试的好与不好直接决定了能不能被录用以及录用后的薪资,作为嵌入式相关工作的面试,C语言是一个最基础也是最重要的面试内容,想要表现良好那就需要面试者有深厚的编程基础和丰富的实战经验,以及洞察一些的火眼金睛。本文归纳整理总结曾经在面试中遇到的问题以及一些高频的C语言面试题目,给予面试者在需要的时候锻炼己身,正确拿下心仪的OFFER。

青椒*^_^*凤爪爪的博客 1566

【C语言】不创建临时变量(不开辟新空间),实现两个数的交换

你能够不创建临时变量(不开辟新空间)实现两个数的交换吗?

丨归凡的博客 548

H.264 Profile与Level详解:如何为不同应用场景选择合适的编码配置

本文深入解析了H.264编码标准中的Profile与Level概念,指导开发者如何为不同应用场景选择合适的配置。文章对比了Baseline、Main和High三大Profile的特性与适用场景,并解释了Level如何限定视频的分辨率、帧率与码率上限。通过实战指南,帮助读者在视频通话、在线点播和专业制作等场景中,平衡画质、兼容性与性能,实现高效编码。

rgv2345678的博客 238

空间复杂度为O(1)的两数交换

两数交换 [不开辟新空间,即额外空间复杂度为O(1)] 1.先上结论 我们采用位运算 按位异或 符号为:“^” 来进行运算 int a=5,b=9; a=a^b; b=a^b; a=a^b; System.out.println("a="+a);//a=9 System.out.println("b="+b);//b=5 2.按位异或的性质 ✔① 0 ^ a = a; ✔② a ^ a = 0; ✔③ 满足交换律、结合律 a ^ b = b ^ a; a ^ b ^ c = a ^ ( b^

大龄烤红薯的博客 702

IsaacGym四足机器人sim to real全过程详细解析(walk these ways方法)

本文使用强化学习的方法运行到Aliengo机器人上完成从训练到部署的全过程。该方法使用的是GO1机器人提供了完整的sim to real代码和遥控器控制代码,所以我们只需要重新训练和部署健康就可以使用在Aliengo上。该方法使用lcm进行通讯首先程序通过UDP和机器人控制板进行通讯获取机器人状态并下达指令。然后又通过lcm进行机器人状态信息的发布和模型命令的获取。

weixin_44061195的博客 2万+

上机笔试题目:取出指定条件二维数组的子数组

取出指定条件二维数组的子数组: 1)传入参数为: 参数一:String[][]sArray2字符串二维数组 参数二:Stringkey字符串 参数三:StringkeyFormat含匹配符的字符串,如下:%0-%1,其中%x含义如为:一维数据列序号为x的值。 keyFormat 可以为 %0-%1-%2,%0-%3-%8-%x...... 例子如下...

91奔跑的蜗牛 636

将两个数交换的3种方法(异或法有陷阱!)

将两个数字进行交换,一共有3种方法: 使用额外空间的方法: 最常用的方法,代码如下: int a=50,b=22,t; t=a; a=b; b=t; 不使用额外空间的方法:(1)加减法 (2)异或法 (1)加减法代码如下: int a=50,b=22,t; a=a+b; b=a-b; a=a-b; (2)异或法(是两数交换所用时间最快的方法)

Software_55White的博客 2319

YOLO11创新改进系列:卷积,主干 注意力,C3k2融合,检测头等创新机制(已更新110+)

本专栏提供详细的 YOLO11 教程,包括基础知识、源码解析、入门实践、算法改进和项目实战,适合发表YOLO11 学习者订阅。内容包含 100+多篇独家改进机制,适合发表论文,评分高达 96 分。订阅者将获得一键运行的改进文件及答疑交流群支持。 使用服务器的同学还可以私聊获取搭建好的运行环境。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1万+

面试篇1:嵌入式C语言面试常见问题

嵌入式C语言面试常见问题 入门C语言20问20答: 01源程序的编译及链接是怎样一个过程? 02编写第一个简单的C语言程序 03C语言是强类型的语言,这是什么意思? 任何程序都要处理数据,计算机可以处理的数据有多种类型。在C语言程序中,用来保存数据的变量必须事先定义才能在程序中使用。定义变量的语法如下:变量类型名变量名表; 例如,以下语句定义了x、y、z三个变量名,其值只能取整型值:int x,y,z;在C程序中,每一个变量都必须声明其取值类型。 因此,C语言是一种强类型的程序设计语言。对于程序中使用到

哒宰的博客 1190

【华为OD机试真题E卷】300、 出租车计费 、靠谱的车 | 机试真题+思路参考+代码分析(C++、Java、Py、C语言、JS)

题目描述 >程序员小明打了一辆出租车去上班,出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大,出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常 >  比如: 1、23再多一块钱就变为25; 2、39再多一块钱变为50; 3、399再多一块钱变为500; >  小明识破了司机的伎俩,准备利用自己的学识打败司机的阴谋,给出计费表的表面读数,返回实际产生的费用

KJ.JK 4万+

Sigrity SPEED2000 General SI Simulation模式如何进行信号仿真分析操作指导-DDR

本例是几个简单的板载DDR颗粒的结构,本例中使用General SI Simulation模式仿真DDR信号,结构拓扑如下,Addcmd,clk,cke都是T拓扑。Sigrity SPEED2000 General SI Simulation模式可以对信号进行仿真分析,仿真将电源视为理想电源,以下图为例进行说明。DQS的接收端模型设置为DQS_34_ODT60_1333。模式如何进行信号仿真分析操作指导-DDR。附带驱动和接收端的IBIS模型。

weixin_54787054的博客 512

C/C++编程笔记: C语言编程面试常见问题,全是经典题!

话不多说,直接上面试题!如果有刚刚学习编程的小伙伴也可以看一下,都是当时大学应该学懂的,但是因为我以前没有好好听课,有些也没有注意到,现在也是提醒大家吧~ C语言的主要特征是什么? C是一种过程语言。C语言的主要功能包括对内存的低级访问,简单的关键字集和简洁的样式。这些功能使其适用于诸如操作系统或编译器开发之类的系统编程。 i ++和++ i有什么区别? 1)表达式“ i ++”返回旧值,然后递增i。表达式++ i递增该值并返回新值。 2)后缀++的优先级高于前缀++。 3)后缀++...

致力于C语言C++知识分享! 1542

【GameFramework框架内置模块】6、实体(Entity)

实体Entity就是一个实体的基本单元,类似于Unity的GameObject对象本体,然后这个本体上面附加其他各种各样组件,才能实现各种各样的功能。一般需要在游戏运行时动态加载的游戏对象,比如怪物、武器、子弹、特效,都需要给这个物体挂载一个实体Entity,这样的话就可以方便的对实例出来的对象进行管理。下面就来看一下如何使用吧。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 3137

C语言面试题常见问题

而str3 和str4并非字符数组而是字符指针,并不分配存储区,其后的“abc”以常量形式存于常量区,str3 和 str4 是指它们指向的地址的首地址,而它们自己仅是指向该区首地址的指针,所以相等。2.在模块内的static函数只可以被这一模块内其他函数调用,这个函数的适用范围被限制在他的模块内。3.在类中,static成员变量属于整个类拥有,对类的的所有对象只有一份拷贝。4.修饰类的成员函数,不改变类中的数据成员.指向常量的指针,指向的常量值不可以改。指针,它们指向相同的常量区域。

u010386121的博客 1058

MaxScript批量修改材质、贴图名称

MaxScript批量修改材质、贴图名称1 实现效果1.1 修改前材质、贴图名称1.2 修改后2 代码 1 实现效果 1.1 修改前材质、贴图名称 1.2 修改后 2 代码 prefixName = "prefiname" maxFile = "maxfilepath" makeDir "newBitmappath" mapsPath = newbitmappath + "\\" fn formatStr index = ( str = index as string newS

郑德帅 3241

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C语言数据结构面试常见问题及答案

BFS从某个顶点开始,逐层访问与之相邻的顶点,直到找到目标顶点或遍历完所有顶点为止。后序遍历先遍历左子树,然后遍历右子树,最后访问根节点。特别是在使用C语言这样的底层语言时,对数据结构的掌握尤为重要。链表的大小可以动态调整,插入和删除元素时只需调整指针,效率较高。队列是一种先进先出(FIFO)的数据结构,允许在队尾进行插入操作,在队头进行删除操作。栈是一种后进先出(LIFO)的数据结构,只允许在一端进行插入和删除操作。图是由顶点(节点)和边组成的数据结构,可以表示复杂的关系网络。这通常需要借助队列来实现。

qq_43341279的博客 1214

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

c语言面试常见问题

1.a++   ++a  区别 第一种情况: a=3; b=a++; 运行后 b=3,a=4 第二种情况: a=3; b=++a; 运行后 b=4,a=4. 2.  ~ 按位取反;“>>”代表右移运算符,就相当于“shr”。该运算符为双目运算符,结合方向为从左到右,作用是把一个整型数的所有位向右移动指定的位数,移动到右边界之外的多余二进制位会被丢弃,并从左边界移入0。

qianlongbatian2的专栏 940

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

c语言指针笔试面试题,c语言指针面试常见问题

c语言指针面试常见问题指针的使用,一直是c语言面试题中必考的部分,因为指针本身使用的复杂性与普适性,所以考点非常多,而且也可以与其他知识相互结合,因此我们将会使用五篇专题的篇幅来介绍指针。分析下面的程序,指出程序中的错误:本题解析没有正确为str分配内存空间,将会发生异常。问题出在将一个字符串复制进一个字符变量指针所指地址。虽然编译的时候没有报错,但是在运行过程中,因为越界访问了未被分配的内存,而...

weixin_42502122的博客 494

毕业学生,C语言面试十大常见问题,提升面试分数

新司机C语音基础面试常见问题

YMJZ22021的博客 1522
上一篇: 单片机面试常见问题
下一篇: Linux常用命令-嵌入式学习储备知识
ZHU~.
博客等级 码龄7年 193粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值