当前位置:网站首页>西加加
西加加
2022-07-17 00:14:00 【HYYyyying】
转自阿秀^ _ ^
文章目录
1、指针和引用的区别
- 指针是一个变量,存储一个地址;引用和原来的变量实质上是一个东西,时原变量的别名。
- 指针可以有多级,引用只能有一级。
- 指针可以为空,引用不能为空且在定义的时候必须初始化。
- 指针在初始化后可以改变指向,而引用在初始化后不可变。
- sizeof指针得到该指针的大小,sizeof引用得到的是引用所指向变量的大小。
- 当把指针作为参数进行传递时,也是将实参的一个拷贝传递给形参,两者指向的地址相同,但不是同一个变量,在函数中改变这个变量的指向不影响实参;而引用却可以。
2、指针和引用的使用场景
- 需要返回函数内局部变量的内存的时候用指针。使用指针传参需要开辟内存,用完要释放,不然会造成内存泄漏。而返回局部变量的引用是没有意义的。
- 对栈空间大小比较敏感(比如递归)的时候使用引用。使用引用传递不需要创建临时变量,开销更小。
- 类对象作为参数传递的时候使用引用,这是C++类对象传递的标准方式。
3、struct和class的区别
共同点:
- 两者都拥有成员函数、共有和私有部分
- 任何可以用class完成的工作都可以用struct完成
不同点:
- 两者如不对成员指定公私有,struct默认公有,class默认私有
- struct默认public继承,class默认private继承
4、define和const区别
1、编译阶段:
define是在编译的预处理阶段起作用,而const是在编译、运行的时候起作用
2、安全性:
define只做替换,不做类型检查和计算,也不求解,容易产生错误。
const常量有数据类型,编译器可以对其进行类型安全检查。
3、内存占用:
宏定义的数据没有分配内存空间,只是插入替换掉;
const定义的变量只是值不能改变,但要分配内存空间。
5、static和const的作用
static
不考虑类的情况
- 隐藏。所有不加static的全局变量和函数具有全局可见性,可以在其他文件中使用,加了之后只能在该文件所在的编译模块中使用
- 默认初始化为0,包括未初始化的全局静态变量与局部静态变量,都存在全局未初始化区
- 静态变量在函数内定义,始终存在,且只进行一次初始化,具有记忆性,其作用范围与局部变量相同,函数退出后仍然存在,但不能使用
考虑类的情况
- static成员变量:只与类关联,不与类的对象关联。定义时要分配空间,不能在类声明中初始化,必须在类定义体外部初始化,初始化时不需要标示为static;可以被非static成员函数任意访问。
- static成员函数:不具有this指针,无法访问类对象的非static成员变量和非static成员函数;不能被声明为const、虚函数和volatile;可以被非static成员函数任意访问
const
- 不考虑类的情况
- const常量在定义时必须初始化,之后无法更改
- const形参可以接收const和非const类型的实参,例如// i 可以是 int 型或者 const int 型void fun(const int& i){ //…}
- 考虑类的情况
- const成员变量:不能在类定义外部初始化,只能通过构造函数初始化列表进行初始化,并且必须有构造函数;不同类对其const数据成员的值可以不同,所以不能在类中声明时初始化
- const成员函数:const对象不可以调用非const成员函数;非const对象都可以调用;不可以改变非mutable(用该关键字声明的变量可以在const成员函数中被修改)数据的值
补充一点const相关:const修饰变量是也与static有一样的隐藏作用。只能在该文件中使用,其他文件不可以引用声明使用。 因此在头文件中声明const变量是没问题的,因为即使被多个文件包含,链接性都是内部的,不会出现符号冲突。
6、堆和栈的区别
申请方式不同:
- 栈由系统自动分配。
- 堆是自己申请和释放的。
申请大小限制不同:
- 栈大小固定,是一块连续的内存空间,向低地址方向增长;
- 堆是一块不连续的内存区域,向高地址增长
申请效率不同:
- 栈由系统分配,速度快,不会有碎片。
- 堆由程序员分配,速度慢,会有碎片。
7、区分以下指针类型
int *p[10]
int (*p)[10]
int *p(int)
int (*p)(int)
int *p[10]表示指针数组,强调数组概念,是一个数组变量,数组大小为10,数组内每个元素都是指向int类型的指针变量。
int (*p)[10]表示数组指针,强调是指针,只有一个变量,是指针类型,不过指向的是一个int类型的数组,这个数组大小是10。
int *p(int)是函数声明,函数名是p,参数是int类型的,返回值是int *类型的。
int (*p)(int)是函数指针,强调是指针,该指针指向的函数具有int类型参数,并且返回值是int类型的。
8、new/delete和malloc/free的异同
相同点
- 都可用于内存的动态申请和释放
- new是类型安全的,malloc不是。例如:
int *p = new float[2]; //编译错误
int *p = (int*)malloc(2 * sizeof(double));// 编译无错误
- new调用名为operator new的标准库函数分配足够空间并调用相关对象的构造函数,delete对指针所指对象运行适当的析构函数;然后通过调用名为operator delete的标准库函数释放该对象所用内存。后者均没有相关调用
- 后者需要库文件支持,前者不用
9、new和delete如何实现
- new的实现过程是:首先调用名为operator new的标准库函数,分配足够大的原始为类型化的内存,以保存指定类型的一个对象;接下来运行该类型的一个构造函数,用指定初始化构造对象;最后返回指向新分配并构造后的对象的指针。
- delete的实现过程:对指针指向的对象运行适当的析构函数;然后通过调用名为operator delete的标准库函数释放该对象所用的内存。
边栏推荐
- STL -- set container
- DQN理论基础及其代码实现【Pytorch + CartPole-v0】
- Install websocketpp
- 二叉树的遍历
- Clion installation and ROS development to realize automatic prompt completion
- ENVI_ Idl: read the NO2 column content of all OMI products and calculate the monthly average, quarterly average, annual average + analysis
- STL--string容器
- php伪协议实现命令执行
- ENVI_IDL: 文本文件的读取(主要是txt、csv文件)
- STL--deque容器
猜你喜欢
Hash table, bloom filter, distributed consistency hash
flask模板注入
ENVI_ Idl: batch Reproject MODIS swath products and specify the range output as GeoTIFF format + parsing
DQN理论基础及其代码实现【Pytorch + CartPole-v0】
Chapter 2 - system control principle - > classical control theory
去中心化边缘渲染元宇宙协议Caduceus受邀出席CBAIA 2022峰会,以技术赋能更多Web3应用场景
Jmeter beanshell实现把请求生成的参数化数据写入文件
【Unity开发小技巧】Unity打包PC端exe,压缩打包为一个exe文件
Cookie和Session的区别
Stl--queue container
随机推荐
项目性能优化实战:解决首页白屏问题,自定义 loading 动画优化首屏效果
【HSJFramework】Unity时间管理TimeManger计时器
基于蒙特卡洛的强化学习方法【附带代码实现】
Summary of tree and heap knowledge points
ENVI_ Idl: batch re projection of modisswath products (calling the secondary development interface) + parsing
【工具篇】Unity屏幕画线,Unity屏幕画图HSJ绘画工具
使用JMeter测试基于WebSocket协议的服务
BladeX——精心设计的微服务架构
【Unity面板属性扫盲】导入纹理后设置Texture Import Settings
ENVI_ Idl: batch splice the daily data of MODIS swath and output it in GeoTIFF format
新手如何配置多个 SSH Key(通俗易懂手把手教学)
[tools] unity screen drawing line, unity screen drawing Hsj drawing tool
UE4 笔记
DGC best practice: how to ensure that confidential data is not leaked when entering the lake?
Bugku---- regular matching, cookies
[unity Editor Extension] scriptableobject for internal asset configuration of unity
ENVI_ Idl: batch process the re projection of MODIS swath data and output it to GeoTIFF format + detailed analysis
逻辑漏洞---登录验证码安全
Lecture 2 BTC cryptography principles (notes)
Clion installation and ROS development to realize automatic prompt completion