C语言简答题汇总

您所在的位置:网站首页 简答题需要写答 C语言简答题汇总

C语言简答题汇总

2024-03-14 05:42| 来源: 网络整理| 查看: 265

C语言简答汇总

根据网上常见的一些面试题整理,用于考研复试备考,大部分是C语言问答,但不仅仅限于C语言问答,也包括计网和操作系统相关的一些问答,内容如有错误,欢迎指正 1、c语言的特点以及C语言与Python的比较? c语言的数据类型丰富,具有现代语言的各种数据结构,能实现复杂的运算。c语言使,用灵活方便,便于实现程序的结构化,节省内存。 C语言与Python的比较: (1)首先Python的使用要更加简单灵活,要实现相同的功能,Python的代码量通常只有C语言的30% (2)C语言是面向过程的语言,很多时候需要自己手动实现函数来完成一些功能,Python中引入了类和对象,是面向对象编程的语言。 (3)Python拥有许多优秀的第三方库,在编程的时候更加的简单。 (4)c语言的数据类型丰富,Python的数据类型只有数字、字符串、列表、元组、集合、字典6种,不需要事先定义变量类型,使用更加简便。 2、c语言为什么要规定,对所有使用的变量要“先定义,后使用”? 凡是未被事先定义的变量,在使用过程中不会被当作变量名,这样能够保证程序中的变量名使用正确。每一个变量被指定一个确定的数据类型,在编译时就能为其分配相应的存储单元。指定一个变量属于一个类型,在编译的时候就能检查该变量是否使用正确。通俗来讲,给变量一个存储位置,方便操作。 3、根据自己的认识,写出c语言的特点 语言简洁,使用灵活方便,具有丰富的运算符和数据类型,便于实现程序的结构化,用c语言编写的程序可移植性好,c语言可以作为系统设计语言、应用程序设计语言,c语言具有绘图能力和强大的数据处理能力,它是数值计算的高级语言 4、c 语言的主要用途: c语言主要用于程序的编程开发,和其他的高级语言相比,都采用符号形式,提供许多高级的程序结构,供编写人员组织复杂的程序。都是面向问题的语言,独立于具体的机器,比较接近人的语言习惯,能更有效的描述各种算法。c语言具有绘图能力和可移植性,有更强的数据处理能力,适用于编写系统软件、二维、三维图形和动画。 5、写出一个程序的组成 程序名、预编译指令、标准的输入输出、c语言的主函数、函数开始标志、定义变量、给变量赋值、输出结果、程序正常结束、函数结束标志 6、C 语言以函数为程序的基本单位,有什么好处? 函数是程序的基本组成单位,可以用函数作为程序模块来实现c语言程序。利用函数不仅可以使程序模块化,而且可以使程序设计的简单和直观,提高程序的可读性和可维护性。还可以把程序中的一些计算编成通用函数,以供随时使用。 7、关键字和一般标识符有什么不同? 标识符用来标识源程序中的某个对象的名字,一个标识符由字母、数字和下划线组成。关键字可以定义变量、表达式语句功能和对一些文件进行预处理,关键字已被编译系统本身使用,所以用户编写程序时不能够使用这些关键字来作为标识符,如int,if,for等。 8、if语句中的条件表达式可以是任意的合法表达式吗?Switch语句中break的作用是什么? 可以是任意数值。在switch语句中,break语句可使流程立即跳出switch语句体不执行其他的case。 9、三种循环结构中的条件是循环进行的条件还是循环结束的条件?循环结构中break语句和continue语句的作用是什么,二者有何区别? for语句、while语句:循环进行的条件;do-while语句:循环结束的条件;break可用于switch语句,表示跳出整个switch块,而continue则不能用于switch语句,它们都可用于循环语句的循环体,break用于立即退出当前循环,而continue仅跳过当次循环,本次循环体内不执行continue语句后的其他语句,但下次循环还会执行。 10、字符数组与字符串是否相同?若不相同,有何区别? 不相同,C语言中没有专门的字符串变量,如果要将一个字符串存放在变量中,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素放一个字符。字符串必须以’\0’结尾,字符数组可以包含多个’\0’ 11、函数的嵌套调用与递归调用有什么区别? 函数嵌套允许在一个函数中调用另外一个函数,递归调用是调用本身的函数。函数嵌套就是函数调用函数,是普遍的,递归就是函数调用自身,是函数嵌套的一个特例。 12、结构体类型与我们前面学过的基本类型有哪些区别? 结构体是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型。特点:1、结构体可以在一个结构体中声明不同的数据类型;2、相同的结构的结构体变量可以相互赋值,而数组不行,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制,即使数据类型和数组大小完全相同。3、节省内存空间。第四、高效率。 13、指针与地址有什么联系?在使用指针的过程中应注意哪些细节?指针类型对于程序设计有哪些意义? 指针保存了某个变量的地址,指针本身是一个变量,它也有自身的地址,而指针的内容是某个变量的地址。注意细节:要初始化、正确的传递地址方式、使用时要判断。指针可以用来有效地表示复杂的数据结构,可以用于函数参数传递并达到更加灵活使用函数的目的,使C语言程序设计具有灵活、实用、高效的特点。 14、描述一下gcc的编译过程? gcc编译过程分为4个阶段:预处理、编译、汇编、链接。 预处理:头文件包含、宏替换、条件编译、删除注释 编译:主要进行词法、语句、语义分析等,检查无误后将预处理好的文件编译成汇编文件。 汇编:将汇编文件转换成二进制目标文件 链接:将项目中的各个二进制文件+所需的库+启动代码链接成可执行文件。 15、内存的最小存储单位以及内存的最小计量单位分别是? 内存的最小存储单位为二进制,内存的最小计量单位是字节 16、#include与#include””的区别? Include到指定的目录找头文件,#Include””先到项目所在目录找头文件,如果没有找到再到系统指定的目录下寻找 17、描述一下变量的命名规则? 变量名必须以字母或者下划线开始,其后为字母数字下划线 18、变量的声明与定义有什么区别 声明变量 不需要建立存储空间,变量的定义需要建立存储空间。为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但是只在一个地方定义。加入 extern 修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量。 19、谈谈c语言中有符号和无符号的区别? 有符号:数据的最高位为符号位,0表示正数,1表示负数 无符号:数据的最高位不是符号位,而是数据的一部分 20、谈谈计算机中补码的意义? 统一了零的编码;将符号位与其他位统一处理将减法运算转换成加法运算 21、谈谈数组的特点? 同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的 22、数组的分类? 数组的分类主要是:静态数组、动态数组两类。 静态数组:类似int arr[5];在程序运行就确定了数组的大小,运行过程不能更改数组的大小。 动态数组:主要是在堆区申请的空间,数组的大小是在程序运行过程中确定,可以更改的大小。 23、描述一下一维数组的不初始化、部分初始化、完全初始化的不同点 不初始化:如果是局部数组 数组元素的内容随机 如果是全局数组,数组的元素内容为0 部分初始化:未被初始化部分自动补0 完全初始化:如果一个数组完全初始化可以省略元素的个数 数组的大小由初始化的个数确定 24、谈谈数组名作为类型、作为地址、对数组名取地址的区别? 数组名作为类型:代表的是整个数组的大小 数组名作为地址:代表的是数组首元素的二地址 对数组名取地址:代表的是数组的首地址 25、谈谈你对二维数组在物理上以及逻辑上的数组维度理解? 二维数组在逻辑上是二维的,在物理上是一维的,按照先行后列原则存储 26、描述一下函数的定义与函数的声明之间的区别? 函数定义:是指对函数功能的确立、包括指定函数名、函数类型、形参及其类型、函数体等,它是一个完整的、独立的函数单位。 函数的声明:是把函数的名字、函数类型以及形参的个数、类型和顺序通知编译系统,以便在对包含函数调用的语句进行编译时,据此对其进行对照检查(例如函数名是否正确,实参与形参的类型和个数是否一致) 27、描述一下指针与指针变量的区别? 指针:指针是内存地址,指针变量是指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,但由于指针指向的地址存放的数据类型不同,内容所占的存储空间各有不同。 28、描述一下32位或64位平台下指针的大小? 32位平台:任意类型的指针大小为4字节 64位平台:任意类型的指针大小为8字节 29、描述一下指针数组的概念? 指针数组本质是数组,只是数组的每个元素都是一个指针(地址) 30、描述一下普通局部变量、普通全局变量、静态局部变量、静态全局变量的区别? 普通局部变量: 存在栈区、不初始化内容随机、只在定义所在的复合语句中有效、符合语句结束变量空间释放 普通全局变量 :存在全局区、不初始化内容为0、进程结束空间才被释放,能被当前源⽂件或其他源⽂件使⽤,只是其他源⽂件使⽤的时候,记得使用extern修饰 。 静态局部变量: 存在全局区、不初始化内容为0、整个进程结束空间才被释放,只能在定义所在的复合语句中有效。 静态全局变量:存在全局区、不初始化内容为0、整个进程结束空间才被释放,只能被当前源⽂件使⽤。 31、描述一下内存分区 程序在运行前:分为代码区、BSS段(未初始化数据区)、data段(初始化数据区) 程序在运行后:堆区、栈区、全局区(静态区)、文字常量区、代码区 32、在使用realloc给已分配的堆区空间追加空间时需要注意啥? 记得用指针变量保存realloc的返回值 33、结构体与共用体的区别是什么? 结构体中的成员拥有独立的空间、共用体的成员共享同一块空间,但是每个共用体成员能访问共用区的空间大小是由成员自身的类型决定 34、谈谈文件的分类? 文件分为二进制和文本文件 二进制文件基于值编码,需要根据具体的应用才能知道某个值具体的含义 文本文件基于字符编码,一个字节一个意思,可以通过记事本打开 35、文件缓冲区刷新方式有几种? 行刷新、满刷新、强制刷新、关闭刷新 36、哪些情况会出现野指针? 指针变量未初始化、指针释放后未置为空、指针操作超越变量作用域 37、如何理解指针作为函数参数的输入和输出特性? 输入特性:主调函数分配空间 被调函数使用该空间 输出特性:被调用分配空间 主调函数使用该空间 38、如何理解结构体的浅拷贝与深拷贝? 当结构体中有指针成员的时候容易出现浅拷贝和深拷贝的问题。 浅拷⻉就是,两个结构体变量的指针成员指向同⼀块堆区空间,在各个结构体变量释放的时候会出现多次释放同⼀段堆区空间 深拷⻉就是,让两个结构体变量的指针成员分别指向不同的堆区空间,只是空间内容拷⻉⼀份,这样在各个结构体变量释放的时候就不会出现多次释放同⼀段堆区空间的问题 39、描述⼀下结构体对⻬规则?

数组成员对⻬规则。第⼀个数组成员应该放在offffset为0的地⽅,以后每个数组成员应该放在offffset 为min(当前成员的⼤⼩,#pargama pack(n))整数倍的地⽅开始(⽐如int在32位机器为4字节,#pargama pack(2),那么从2的倍数地⽅开始存储)。 结构体总的⼤⼩,也就是sizeof的结果,必须是min(结构体内部最⼤成员,#pargama pack(n))的整数倍,不⾜要补⻬。结构体做为成员的对⻬规则。如果⼀个结构体B⾥嵌套另⼀个结构体A,还是以最⼤成员类型的⼤⼩对⻬,但是结构体A的起点为A内部最⼤成员的整数倍的地⽅。(struct B⾥存有struct A,A⾥有 char,int,double等成员,那A应该从8的整数倍开始存储。),结构体A中的成员的对⻬规则仍 满⾜原则1、原则2。 40、啥叫宏函数以及作⽤? 在项⽬中,经常把⼀些短⼩⽽⼜频繁使⽤的函数写成宏函数,这是由于宏函数没有普通函数参数压栈、跳转、返回等的开销,可以调⾼程序的效率。 宏通过使⽤参数,可以创建外形和作⽤都与函数类似地类 函数宏(function-like macro). 宏的参数也⽤圆括号括起来,来保证宏函数的完整性。 41、如何理解库函数 ? 库是已经写好的、成熟的、可复⽤的代码。每个程序都需要依赖很多底层库,不可能每个⼈的代码从零开始编写代码,因此库的存在具有⾮常重要的意义。 在我们的开发的应⽤中经常有⼀些公共代码是需要反复使⽤的,就把这些代码编译为库⽂件。 库可以简单看成⼀组⽬标⽂件的集合,将这些⽬标⽂件经过压缩打包之后形成的⼀个⽂件。像在Windows这样的平台上,最常⽤的c语⾔库是由集成按开发环境所附带的运⾏库,这些库⼀般由编译⼚商提供 42、sizeof和strlen的区别? 1、sizeof是一个操作符,strlen是库函数。 2、Sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为’\0’的字符串作参数。 3、编译器在编译时就计算出了sizeof的结果。而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度。 43、&&和&、||和|有什么区别? 1、&和|对操作数进行求值运算,&&和||只是判断逻辑关系。 2、&&和||在在判断左侧操作数就能确定结果的情况下就不再对右侧操作数求值。 44、typedef 和 define 有什么区别 1、用法不同:typedef 用来定义一种数据类型的别名,增强程序的可读性。define 主要用来定义常量,以及书写复杂使用频繁的宏。 2、执行时间不同:typedef 是编译过程的一部分,有类型检查的功能。define 是宏定义,是预编译的部分,其发生在编译之前,只是简单的进行字符串的替换,不进行类型的检查。 3、作用域不同:typedef 有作用域限定。define 不受作用域约束,只要是在 define 声明后的引用都是正确的。 4、对指针的操作不同:typedef 和 define 定义的指针时有很大的区别。 5、typedef 定义是语句,因为句尾要加上分号。而 define 不是语句,千万不能在句尾加分号。 45、链表和数组有什么区别? 数组和链表有以下几点不同: 1、存储形式:数组是一块连续的空间,声明时就要确定长度。链表是一块可不连续的动态空间,长度可变,每个结点要保存相邻结点指针。 2、数据查找:数组的线性查找速度快,查找操作直接使用偏移地址。链表需要按顺序检索结点,效率低。 3、数据插入或删除:链表可以快速插入和删除结点,而数组则可能需要大量数据移动。 4、越界问题:链表不存在越界问题,数组有越界问题。 46、简述队列和栈的异同? 队列和栈都是线性存储结构,但是两者的插入和删除数据的操作不同,队列是“先进先出”,栈是“后进先出” 47、空指针和未初始化的指针是一回事吗? 空指针在概念上不同于未初始化的指针;空指针可以确保不指向任何对象或函数;而未初始化指针则可能指向任何地方。

48、static有什么用途?(请至少说明两种) 限制变量的作用域; 设置变量的存储域 49、引用与指针有什么区别? 引用必须被初始化,指针不必;引用初始化以后不能被改变,指针可以改变所指的对象;不存在指向空值的引用,但是存在指向空值的指针。 50、描述实时系统的基本特性 在特定时间内完成特定的任务,实时性与可靠性 51、全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量存储在静态区,局部变量存在堆栈 52、什么是平衡二叉树? 左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1 53、堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源 54、冒泡排序算法的过程?时间复杂度是什么?空间复杂度? 假设排序是从小到大排序,从左到右依次比较两个相邻元素,发现左边的元素大于右边的元素就交换位置,直到最后一个元素,这趟排序可以将最大的元素转移到最后一个位置上,重复上述过程,直到找出第N大的数,排序结束 O(n^2) 空间复杂度是O(n) 55、Internet采用哪种网络协议?该协议的主要层次结构? 采用tcp/ip五层网络协议,包括应用层/传输层/网络层/数据链路层/物理层 56、IP地址的编码分为哪俩部分? IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分 57、局部变量能否和全局变量重名? 可以重名,局部变量会屏蔽全局变量 58、如何引用一个已经定义过的全局变量? 可以用引用头文件的方式,也可以用external关键字 59、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错 60、语句for( ;1 ;)有什么问题?它是什么意思? while(1)相同 61、do…while和while…do有什么区别? 前一个循环一遍再做判断,后一个判断之后再循环 62、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存 在于(堆)中 63、队列和栈有什么区别? 队列先进先出,栈后进后出 64、对于一个频繁使用的短小函数,在C语言中应用什么实现? 用宏定义 65、直接链接两个信令点的一组链路称作什么? PPP点到点连接 66、软件测试都有那些种类? 黑盒:针对系统功能的测试 白盒:测试函数功能,各函数接口 67、TCP/IP通信建立的过程怎样,端口有什么作用? 三次握手,端口确定是哪个应用程序使用该协议 68、进程和线程的差别。 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源 (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源, 导致系统的开销明显大于创建或撤销线程时的开销。 总之线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护,进程与之相反 69、嵌入式系统中经常要用到无限循环,你怎么用C编写死循环。 while(1)或者for( ; ; ) 70、关键字static的作用是什么? 定义静态变量 71、关键字const有什么含意? 表示常量不可以修改的变量 72、进程之间通信的途径 共享存储系统、消息传递系统、管道:以文件系统为基础 73、进程死锁的原因 资源竞争以及进程推进顺序非法 74、死锁的4个必要条件:互斥、请求与保持、不可剥夺、循环等待四个条件 75、死锁的处理: (1)预防死锁。破坏死锁产生的四个必要条件中的一个或几个。 (2)避免死锁。用某种方法防止系统进入安全状态,从而避免死锁(银行家算法)。 (3)死锁的检测和解除。允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后才去某种措施解除死锁。 76、操作系统中进程调度策略有哪几种? FCFS(先来先服务),优先级,时间片轮转,多级反馈 77 、数组和链表的区别 数组:数据顺序存储,固定大小 链表:数据可以随机存储,大小可动态改变 78、的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点? 物理层、链路层、网络层、运输层、会话层、表示层、应用层 TCP/UDP属于运输层 TCP:提供稳定的传输服务、有流量控制,缺点是包头大,冗余性不好 UDP:不提供稳定的服务,包头小,开销小



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3