亦有资源网

C++语言基础到进阶学习资源汇总

20个最经典的C语言问答题,建议关注加收藏

1、#include"" 与#include <>的区别?

include<>到系统指定目录寻找头文件,#include ""先到项目所在目录寻找头文件,如果没有找到,再到系统指定的目录下寻找


2、描述一下gcc的编译过程?

gcc编译过程主要包含分为了4个阶段,分别是预处理、编译、汇编、链接

预处理:处理所有#号开头的指令,比如:头文件的引入、条件编译、宏定义的替换、将注释的部分去掉,这里是将.c源文件转化为.i的预处理源文件,例如hello.c -> hello.i

编译:进行词法、语法、语义分析等,如果没有错误,这里将会把预处理好的.i文件转化为.s的汇编源文件,例如hello.i -> hello.s

汇编:将.s汇编文件转换成 .o的二进制目标文件,例如hello.s -> hello.o

链接:将项目中的各个二进制.o文件+所需的库+启动代码链接成可执行文件

多说一句:在这里hello.c、hello.i、hello.s 都是文本文件,可以用记事本之类的打开,而.o和最终生成的可执行文件,已经是二进制文件了,用记事本打开是乱码,没办法查看


3、c语言中有符号和无符号的区别?

  1. 有符号:数据的最高位为符号位,1表示的是负数,0表示正数
  2. 无符号:数据的最高位不是符号位,所有的位都是数值位,只有正没有负

4、计算机中补码的意义是什么?

  1. 将符号位与其他位统一处理
  2. 将减法运算转换成加法运算

5、内存的最小的存储单位,以及内存的最小计量单位分别是?

内存的最小存储单位是二进制位的形式, 内存的最小计量单位是字节(一个字节为8位)


6、数组有哪些重要的特点?

  1. 数组内的所有的成员都具有相同的数据类型
  2. 数组内的所有的成员在内存中的地址是连续的

7、变量的命名规则是什么?

  1. 变量名可以由字母、数值、下划线组成。
  2. 可以以下划线和字母开头,但是不可以以数值开头。

8、变量的声明与定义有啥区别?

声明变量是不需要创建和分配给变量存储空间的, 而变量的定义需要开辟内存空间,并且分配给它


9、普通局部变量、普通全局变量、静态局部变量、静态全局变量的区别

普通局部变量: 是存放在栈里面的、如果不初始化的话,其值是随机的、只在其所在的函数内或者花括号内有效,出栈后变量被销毁。

  1. 普通全局变量 :是存放在栈里面的、如果不初始化的话,其值为0、进程结束,该变量所占的空间才会被释放,能被当前源文件或其他源文件使用,只是其他源文件使用的时候,需要使用extern进行修饰。
  2. 静态局部变量: 是存放在全局区里面的、如果不初始化的话,其值为0、整个进程结束后,其所占的空间才被释放,只能在定义所在的复合语句中有效。
  3. 静态全局变量 :是存放在全局区里面的、如果不初始化的话,其值为0,整个进程结束空间才被释放,只能被当前源文件使用。

10、32位和64位平台下,指针所占空间的大小

  1. 32位平台:任意类型的指针大小为4字节
  2. 64位平台:任意类型的指针大小为8字节

11、静态数组和动态数组的区别。

  1. 静态数组:在程序运行就确定了数组的大小,例如int array[10],在数组被定义的时候,数组大小就已经固定下来了,运行过程中,不能更改数组的大小。
  2. 动态数组:是通过malloc等函数进行申请的,申请到的是堆空间,数组的大小是可以在程序运行过程中确定的。

12、简单描述一下指针是什么?

指针:指针即使地址也是变量,在C语言中内存单元的地址叫指针,同时C语言里还有一种变量叫指针,其内部存放的是其指向的变量的地址。


13、函数指针和指针函数的区别

简单地说:

  1. 函数指针本质上是一个指针,其指向的是一个函数代码的首地址,指向的是一个函数;
  2. 指针函数本质上是一个函数,其返回值是一个指针

14、文件的分类

文件分为二进制和文本文件

  1. 二进制文件基于值编码,需要根据具体的应用才能知道某个值具体的含义,用记事本打开是一对的乱码,因为它不是基于字符编码的。
  2. 文本文件基于字符编码,是可以通过记事本打开的。

15、当结构体中有指针成员的时候,容易出现浅拷贝与深拷贝的问题

浅拷贝:两个结构体变量的指针成员,指向同一块堆区空间,在各个结构体变量释放的时候,会出现多次释放同一段堆区空间。

深拷贝:让两个结构体变量的指针成员,分别指向不同的堆区空间,只是空间内容拷一份,这样在各个结构体变量释放的时候,就不会出现多次释放同一段堆区空间的问题。


16、什么叫宏函数,其作用是什么?

我们经常把一些短小而又频繁使用的函数,会写成宏函数,这是由于宏函数没有普通函数参数压栈、跳转、返回等的开销,可以调高程序的效率。 宏通过使用参数,可以创建外形和作用都与函数类似地类 函数宏。 宏的参数需要圆括号括起来,来保证宏函数的完整性。

17、如何理解库函数?

库是已经写好的、成熟的、可复用的代码。每个程序都需要依赖很多底层库,在实际项目开发的过程中,不可能每个人的代码都从零开始编写代码,因此库的存在具有非常重要的意义。
在我们的开发的应用中经常有一些公共代码是需要反复使用的,就把这些代码编译为库文件。 库可以简单看成一组目标文件的集合,将这些目标文件经过压缩打包之后形成的一个文件。
像在Windows这样的平台上,最常用的c语言库是由集成按开发环境所附带的运行库,这些库一般由编译厂商提供。

18、结构体与共用体的区别是什么?

  1. 结构体中的所有成员都拥有独立的空间
  2. 共用体的成员共享同一块空间,而每个共用体成员能访问共用区的空间大小,是由他们自身的类型来决定的。

19、什么情况下会出现野指针?

  1. 指针变量定义了,但是未初始化。
  2. 指针释放后未为置空
  3. 指针操作超越变量作用域

20、指针数组的概念

指针数组本质是数组,只是数组的每个元素是一个指针(地址)



我是小钱嵌入式,会不断地和大家分享嵌入式相关的内容,智能化时代的到来,促就了未来一定是个全民编程的时代,如果你觉得我的分享对你有所帮助,请不要吝惜你的点赞和关注原创写作不易,兄弟姐妹们的点赞和关注,就是我分享最大的动力,谢谢![谢谢],欢迎在评论区和我一起讨论。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言