C++面试题

1、C++指针和引用的区别

1.指针是保存存储地址 一般需要初始化为NULL。指针是一个新的变量,指向另一个变量的地址,我们可以通过访问这个地址来修改另一个变量

2.引用是取别名(类似小名),定义时候一定要初始化,不能为NULL。对引用的操作就是对变量的本身进行操作

3.引用不占用字节,但引用不可以改变:引用和变量指向同一片内存

4.指针占4个字节,指针可以指向不同的地址,可改名

5.引用比指针使用起来简洁、安全(警惕野指针!!!)

6. 在sizeof中含义不同:引用结果为引用类型的大小,指针始终是地址空间所占字节个数(32位:4字节   64位:8字节)

7. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小

8. 有多级指针,但是没有多级引用

9. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理

10.可以有const指针,但是没有const引用;

1.2、在函数中参数传指针和引用的区别

指针:

1、类似于值传递,传入函数的指针只是原指针的一个拷贝,所以此时是存在两个指针,同时指向一个内存空间(同时指向原对象) 2、当在函数中不改变拷贝指针的指向时,修改指针的值,就相当于修改原指针指向的对象 3、当在函数中改变拷贝指针的指向时,只是改变了拷贝指针的指向,不改变原指针的指向,所以不改变原指针指向的对象。 引用:

实质上传递的是实参本身,即传递进来的不是实参的一个拷贝,因此对形参的修改其实是对实参的修改,所以在用引用进行参数传递时,不仅节约时间,而且可以节约空间。

1.3、在函数中参数值传递、引用传递、指针传递

一、值传递 形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。

二、引用传递 引用传递中,形参为引用,引用即对象的别名。对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。 三、指针传递 形参为指向实参地址的指针,当对形参的指向操作时,也相当于对实参本身进行的操作

一、什么时候应该把形参定义为引用,什么时候不能定义为引用? 1、通过形参调用,修改函数的值,如上述swap()函数。 2、传递大型实参时,避免拷贝副本,可以使用引用传递。 3、通过一次调用输出多个结果类(增加引用形参的数量即可)。 另:当不需要通过函数调用改变实参的值时,就不需要用引用传递。

二、数组作为形参问题 数组有两个特性: 1、不允许拷贝:无法以值传递的方式使用数组形参 2、使用数组时通常都会转换为指针:当我们为函数传递一个数组时,实际上传递的是指向数组首元素的指针 数组作为形参分为两种:形参为数组形参为数组的引用

​​​​​​​

2、C++重写和重载的区别

重载(overload):函数名相同,函数的参数个数、参数类型或参数顺序三者中必须至少有一种不同。函数返回值的类型可以相同,也可以不相同。发生在一个类内部,不能跨作用域。也就是说用同一个函数完成不同的功能

重写(override):也叫做覆盖,一般发生在子类和父类继承关系之间。子类重新定义父类中有相同名称和参数的虚函数,返回值可以不相同,但是必须是父子关系的指针或引用.

重写需要注意:

1、 被重写的函数不能是static的。必须是virtual的

2 、重写函数必须有相同的类型,名称和参数列表

3 、重写函数的访问修饰符(public/private/protected)可以不同。

3、什么是进程

程序的执行实例被称为进程(process)。简单来说:进程是动态的概念,指的是程序的一次运行活动,通俗来说就是程序跑起来了,系统中就多了一个进程程序的一次执行过程。

4、什么是程序

程序(program)是存放在磁盘文件中的可执行文件。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c++面试题53个问题 1.C++的三大特性 2.C和C++的区别 3.全局变量和局部变量在内存分配上有何不同 4.static的作用 5.const解释其作用 6.指针和引用的区别 7.智能指针 8.简述深拷贝和浅拷贝的区别 9.编写my_strcpy函数,实现与库函数strcpy类似的功能,不能使用任何库函数 10.请讲述堆和栈的区别 11.全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的 12.new、delete、malloc、free之间的关系 13. 头文件种的ifndef/define/endif 是干什么用的 14.TCP和UDP有什么区别 15.STL库用过吗?常见的STL容器有哪些?算法用过哪几个 16.同步IO和异步IO的区别 17.说下你对内存的了解 18.C++文件编译与执行的四个阶段 19.extern关键字的作用 20.#define和const的区别 21.结构体struct和共同体union(联合)的区别 22.C++中vector和list的区别 23.结构体和类的区别 24.STL中map和set的原理(关联式容器) 25.MFC的消息机制 26.消息映射 27.列举几种进程的同步机制,并比较其优缺点 28.数组和链表的区别 29.MFC主要要用到哪几个类?及其各个类的作用 30.MFC六大核心机制 31.OnDraw和OnPaint 32.win32程序的消息响应机制是如何实现的 33.MFC中的消息响应机制是如何实现的 34.WM_COMMAND命令消息处理顺序 35.MFC序列化的概念 36.PeekMessage和GetMessage的主要区别 37.WIN32创建窗口程序基本函数 38.Windows中的系统消息循环占用CPU的疑问 39.队列消息与非队列消息 40.GDI对象绘图步骤 41.设备上下文DC 42.GDI位图绘制步骤 43.当模态对话框点开后,主窗口还能响应处理消息吗 44.MFC的消息分类 45.CListCtrl 虚拟列表技术 46.虚函数是怎么实现的 47.什么是内存泄漏?面对内存泄漏和指针越界,你有哪些方法? 48.变量的声明和定义有什么区别 49.sizeof是一个操作符,strlen是库函数 50.写一个“标准”宏MIN 51.简述strcpy sprintf与mencpy的区别 52.链表与数组的区别 53.简述队列和栈的异同

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值