Linux C/C++面试题汇总

前言

最近面试的比较多,看了很多关于面试的内容,有些平时工作用的比较少或者没有主要到的地方,长时间不看就会忘记,如果下次面试还需要再次找这些东西比较麻烦,所以写此篇文章就是为了方便以后面试,也给一些即将面试的人提供一些帮助。以后如果面试有新的值得关注的问题作者会及时更新。

计算机基础

程序的内存空间

在这里插入图片描述
堆栈段(stack)
由编译器自动分配和释放,存放函数的参数和局部变量。操作方式类似于数据结构中的栈。
堆(heap)
由程序员分配和释放。如果程序员没有释放,在程序结束时由操作系统释放。堆得操作方式和数据结构中的堆不同,堆空间的操作方式类似于链表。
BSS
存放未初始化的全局变量和static静态变量。
数据段(data)
存放初始化之后的全局变量和static静态变量
代码段
以二进制格式存放程序和函数主体。

进程和线程相关

  1. 进程有独立的地址空间,是资源分配的最小单位。线程没有独立的地址空间,是系统调度的最小单位(执行运算的最小单位)。
  2. 一个程序最少有一个进程,一个进程最少有一个线程。
  3. 线程的崩溃基本上会导致进程的崩溃,所以多进程比多线程的程序健壮性更好 ,多线程开销小,效率高,但是不便于资源的保护和管理。多进程相反
  4. 进程有独立的内存,多线程共享这个进程的内存,所以多线程编程极大的提高了程序的运行效率,在多核CPU的系统中多线程可以充分利用CPU多核运算的能力。

关键字

在面试中经常会背问道关键字,如果能答出关键字的所有功能会加分。

const

const关键字最常被问道的功能就是以下几点:

  1. 必须被初始化
  2. const修饰的变量只能被读不能修改
  3. 修饰指针变量时到底是指针变量不可被修改还是指针所指向的内容不可被修改
  4. const修饰成员函数只能调用const成员函数和修改mutable(mutable 是为了突破 const 的限制而设置的)修饰的成员变量,不可以修改普通成员变量

static

static关键字最常被问道的功能就是以下几点:

  1. static变量存储在数据段中,如果没有显示初始化会被自动初始化为0
  2. static修饰局部变量变量只初始化一次,在程序结束时候才释放
  3. static限制内容的作用域,static修饰的全局变量和函数本文件可见,考虑到程序的安全性如果程序中使用全局变量应该优先使用static
  4. static修饰的成员函数和成员变量不new也可以使用(类名.变量名或者类名.方法名),所有该类的对象共有的。
  5. 类的静态成员可以不可以使用类的非静态成员,而类的非静态成员可以使用类的静态成员。
  6. 静态数据成员可以被初始化,但是只能在类体外进行初始化,若未对静态数据成员赋初值,则编译器会自动为其初始化为 0。
  7. 非静态成员函数有 this 指针,而静态成员函数没有 this 指针。

volatile

volatile关键字修饰的变量告诉编译器不要堆该变量进行编译优化,因为随时可能出现变化,如果要对该变量进行操作要从内存中获取改变量的值而不是从寄存器中获取该变量的值。

C/C++

指针

用变量 a 给出下面的定义
a) 一个整型数(An integer)
b)一个指向整型数的指针( A pointer to an integer)
c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to
an intege)r
d)一个有 10 个整型数的数组( An array of 10 integers)
e) 一个有 10 个指针的数组,该指针是指向一个整型数的。 (An array of 10 pointers to
integers)
f) 一个指向有 10 个整型数数组的指针( A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a func
tion that takes an integer as an argument and returns an integer)
h)一个有 10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型

( An array of ten pointers to functions that take an integer argument and retur
n an integer )
答案是:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument an
d returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integ
er argument and return an integer
数组指针和指针数组的区别:

int *p[4];//指针数组,[]的结合优先于*,代表成员为4个int指针的数组
int (*q)[4];//数组指针代表成员为4个int的数组的指针。指向数组的首地址。

数组指针只是一个指针变量他指向的是一个数组首地址,注意数组指针每次“++”都相当于跳跃了当前的数组长度相当于二维数组每次指针移动就是移动一个一维数组的距离,它占有内存中一个指针的存储空间,指针数组是多个指针变量形成的一个数组,占有多个指针的存储空间。

  • 3
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于C/C++面试题及答案的下载,网上有很多资源可供选择。以下是一种可能的思路和步骤: 1. 在搜索引擎中输入关键字“C/C++面试题及答案下载”,会得到许多相关的网站和资源。可以选择几个看起来可靠的网站。 2. 进入这些网站,可能需要注册或登录才能进行下载。在注册时注意填写准确的个人信息。 3. 浏览网站的目录或搜索框中输入关键字,比如“C/C++面试题”、“C/C++常见问题”等,以寻找所需资料。 4. 选择符合自己需求的面试题及答案,通常会有分类和难度级别的划分,可以根据个人情况选择合适的内容。 5. 点击下载按钮或链接,可能会有付费或免费的选择,根据自己的需求进行选择。 6. 下载后,可以查看文件的格式,常见的是PDF或Word文档,确保自己可以打开和阅读。 7. 打开下载的文件,开始阅读和学习。可以根据自己的时间和目标,制定学习计划。 8. 阅读过程中,可以将重点和难点标记下来,方便后续复习和记忆。 9. 阅读完毕后,可以进行模拟面试或练习题,加深对知识的理解和应用。 10. 在面试前,可以结合实际的项目经验和知识进行整理和总结,为面试做好准备。 需要注意的是,面试题及答案仅供参考和学习使用,面试时应注重个人的理解和能力展示。真正的实力来自于对知识的理解和实践的能力,而不是单纯的背诵答案。所以,通过面试题及答案的学习,要结合实际项目的经验和理解,灵活运用才能更好地展示自己的实力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值