C++面试经常被问到的问题(二)

引用和指针有什么区别

  1. 引用必须被初始化,指针不必;
  2. 引用初始化以后不能被改变,指针可以改变指向的对象;
  3. 不存在指向空值的引用,但是存在指向空值的指针;

指针的定义

指针变量是存储地址的一个变量;

指针是地址的别名;

 

可以有const指针,不能有const引用;

指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的);

sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小;

指针和引用的自增(++)运算意义不一样;

如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏;

 

全局变量和局部变量在内存中是否有区别,如果有,是什么区别?

有区别。全局变量保存在内存的全局存储区中,占用静态的存储单元;局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。

C语言经过编译之后将内存分为以下几个区域:

(1)栈(stack):由编译器进行管理,自动分配和释放,存放函数调用过程中的各种参数、局部变量、返回值以及函数返回地址。操作方式类似数据结构中的栈。

(2)堆(heap):用于程序动态申请分配和释放空间。C语言中的malloc和free,C++中的new和delete均是在堆中进行的。正常情况下,程序员申请的空间在使用结束后应该释放,若程序员没有释放空间,则程序结束时系统自动回收。注意:这里的“堆”并不是数据结构中的“堆”。

(3)全局(静态)存储区:分为DATA段和BSS段。DATA段(全局初始化区)存放初始化的全局变量和静态变量;BSS段(全局未初始化区)存放未初始化的全局变量和静态变量。程序运行结束时自动释放。其中BBS段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。

(4)文字常量区:存放常量字符串。程序结束后由系统释放。

(5)程序代码区:存放程序的二进制代码。

显然,C语言中的全局变量和局部变量在内存中是有区别的。C语言中的全局变量包括外部变量和静态变量,均是保存在全局存储区中,占用永久性的存储单元;局部变量,即自动变量,保存在栈中,只有在所在函数被调用时才由系统动态在栈中分配临时性的存储单元。

 

堆栈溢出都是由什么原因导致的
答:1.函数调用层次太深。函数递归调用时,系统要在栈中不断保存函数调用时的现场和产生的变量,如果递归调用太深,就会造成栈溢出,这时递归无法返回。再有,当函数调用层次过深时也可能导致栈无法容纳这些调用的返回地址而造成栈溢出。 
2.动态申请空间使用之后没有释放。由于C语言中没有垃圾资源自动回收机制,因此,需要程序主动释放已经不再使用的动态地址空间。申请的动态空间使用的是堆空间,动态空间使用不会造成堆溢出。 
3.数组访问越界。C语言没有提供数组下标越界检查,如果在程序中出现数组下标访问超出数组范围,在运行过程中可能会内存访问错误。 
4.指针非法访问。指针保存了一个非法的地址,通过这样的指针访问所指向的地址时会产生内存访问错误。

 

什么函数不能被声明为虚函数

虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一般形式:

virtual 函数返回值类型 虚函数名(形参表){ 函数体 }

设置虚函数须注意: 
1:只有类的成员函数才能说明为虚函数; 
2:静态成员函数不能是虚函数; 
3:内联函数不能为虚函数; (要想成为虚函数,必须能够被取到地址.内联函数不能被取到地址所以不能成为虚函数.)
4:构造函数不能是虚函数; 
5:析构函数可以是虚函数,而且通常声明为虚函数。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C面试会问一些以下类型的问题: 1. C语言基础知识:变量、数据类型、运算符、控制结构、函数、指针等。 2. 数据结构:数组、链表、栈、队列、树、图等。 3. 操作系统:进程、线程、同步、互斥、死锁、内存管理等。 4. 网络编程:TCP/IP、UDP、HTTP等协议,socket编程等。 5. 算法和数据结构:排序、查找、动态规划、贪心等算法。 6. C++基础知识:类、继承、多态、模板等。 7. 编程范式:面向过程、面向对象、函数式编程等。 8. 软件工程:设计模式、UML、代码重构等。 9. 计算机体系结构:CPU、存储器、总线等。 10. 编译原理:词法分析、语法分析、语义分析等。 以上是一些可能出现在C语言面试中的问题类型,当然具体问题还要根据不同公司或者岗位的需求而定。 ### 回答2: 在面试中,面试官可能会问到以下一些问题: 1. 自我介绍:请您简要介绍一下自己,包括个人背景、教育经历和工作经验。 2. 职业目标:您对未来的职业发展有什么规划和目标? 3. 为什么选择应聘该职位:您为什么对这个职位感兴趣?为什么选择应聘我们公司? 4. 如何应对挑战:请举例说明您曾面对的困难和挑战,并介绍您是如何应对的? 5. 团队合作能力:请分享一次您在团队中合作取得成功的经历。 6. 解决冲突能力:面对团队内部的冲突,您是如何处理的? 7. 工作压力管理:如何应对工作中的压力?能否分享一次您成功管理压力的经历? 8. 自我评价:您认为自己最大的优点和最大的劣势是什么?为什么这样评价自己? 9. 行业知识:就您申请的职位和行业,您对其中的关键知识了解多少? 10. 长远规划:你对自己未来五年的职业规划是什么? 面试中可能会有更多的问题,但以上问题是比较见的。在回答问题时,建议诚实、简洁明了地表达自己,突出您的优势,通过具体的案例或经历来支持您的回答,以展示您的能力和适应性。同时,良好的沟通和表达能力也是面试过程中需要展现的关键素质。 ### 回答3: 在面试过程中,面试官会问到各种问题,以下是一些见的面试问题: 1. 个人介绍:请简单介绍一下自己的背景、教育经历、工作经验等。 2. 为什么对这个职位感兴趣:请说明你为什么对这个职位感兴趣,以及你如何将你的技能和经验与这个职位对接。 3. 最大的优点和缺点:请谈谈你认为自己最大的优点和缺点,并举例说明。 4. 解决问题的能力:请描述一次你如何解决一个工作问题的经验。 5. 团队合作能力:你如何在团队中进行合作和沟通?请分享一个例子。 6. 压力处理能力:请描述一次你如何应对压力大的情况,并成功完成任务的经历。 7. 具体项目经验:请描述你在过去工作中参与过的具体项目,你在其中扮演的角色和取得的成果。 8. 自我推销:为什么我们应该雇佣你?请强调你的特长和能为公司带来的价值。 9. 职业发展规划:你对未来五年内的职业规划是什么?你希望在公司中有怎样的发展? 10. 最近的业界动态:请谈谈你对行业最新动态的观察和理解。 以上是一些见的面试问题,在回答的时候要明确简洁,突出自己的优势和经验,并结合具体例子来支撑回答。同时,要保持积极和自信的态度,与面试官保持良好的互动和沟通。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值