《C++面试题·筑基篇》第四弹

#王者杯·14天创作挑战营·第1期#

一、前言

本文将会为大家带来有关C++基础常考的面试题第四弹,希望大家能够从中有所收获!!!

二、正文

16. 一个参数可以既是const又是volatile吗

答:可以,const保证该参数不可以被程序中的代码修改,而volatile又保证每次该值的读取是从内存中读取,每次都是最新的值。往往用于硬件寄存器,并发编程或者信号处理程序,确保在不修改变量值的前提下,能确保每次都访问到最新的外部更新值

17. 全局变量和局部变量有什么区别?操作系统和编译器是怎么知道的?

答:全局变量和局部变量的区别主要在于变量定义的位置,作用域以及声明周期。

  1. 从定义的位置来看,全局变量一般定义在文件的顶部(即所有函数的外部),而局部变量一般定义在一个函数的变量
  2. 从作用域来说,全局变量在定义的文件全局可见,如果加了extern声明,则在其他文件也可见;而局部变量往往只能在函数内部使用,对外部不可见
  3. 从生命周期来说,全局变量的生命周期是跟随整个程序的,当整个程序结束的时候,全部变量的生命周期才会结束;而局部变量的生命周期一般是跟随程序的,起于程序被调用,终于程序返回
  4. 从存储位置来说,全局变量是分配在数据段,而局部变量是分配在栈区

        操作系统和编译时通过全局变量和局部变量的存储位置来区分的,在编译的时候,编译器会创建一个符号表,记录了所有变量的信息,帮助链接的时候确定变量的位置以及作用域,而操作系统则根据这些信息进行内存分配

18. 什么是C++中的指针和引用,它们有什么区别?

答:在C++中,指针和引用都可以用来间接的访问变量,但是它们之间还是有一些区别

        1. 从类型来说,指针是一个变量,用来存储另一个变量的地址,大小随机器一般是4或8个字节;而引用是给另一个变量取别名,理论上不需要额外的内存空间

        2. 从初始化来说,指针可以初始化化为空,即空指针;但是引用不可以悬空,初始化的时候必须指定是谁的引用

        3. 从指向来说,指针可以改变指定的对象;但是引用一旦指定对象后,就不可以再修改了

        4. 在使用的时候,使用指针需要解引用操作符来访分指定的对象;而引用则不需要,直接就可以访问指定的对象,不需要解引用操作符

        5. 在性能上,由于指针的使用实际地址的存储和解引用操作,但是指针有可能为空,因此编译器可能需要添加额外的检查,这会影响一些性能;引用一般作为一个别名的使用,不需要额外的内存空间和解引用操作符,通常更为高效。

19.  数组名和指针(指向数组首元素的指针)的区别

答:

        1. 从类型上来说,数组名是一个数组类型,为一个常量;而指针是一个指针类型,是一个变量。

        2.从可变的角度来说,数组名是不可以修改的,但是指针是可以修改的

        3. 从内存分配的角度,数组名在编译时指向一个固定大小的内存区域,不能改变他的大小,指针则可以指向任何位置,可以动态分配内存

        4. 一般情况下,访问数组名和数组首元素的地址是一样的,但是有些情况,例如sizeof的时候,前者就是数组的大小,后者就是指针的大小

20. 一个指针占用多少字节

答:一个指针占用的字节数依赖于系统的结构(即操作系统和处理器的位数),32位系统下一般是4个字节,64位系统下一般是八个字节

三、结语

        到此为止,本文关于《C++面试题 · 筑基篇》第四弹的内容到此结束了,如有不足之处,欢迎小伙伴们指出呀!

         关注我 _麦麦_分享更多干货:_麦麦_-CSDN博客

         大家的「关注❤️ + 点赞👍 + 收藏⭐」就是我创作的最大动力!谢谢大家的支持,我们下期见!!

评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_麦麦_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值