可寻址变量,持久性;
没有变量名,不可寻址,短暂性;
指向的内存地址,指针变量存储的就是指向的对象的首地址
为一个变量起别名,定义引用的时候一定要初始化,初始化后不能改变;
①别名的地址等于原名的地址;指针变量的地址不等于原名的地址;
(39条消息) 指针的指针的地址,指针自身的地址,指针指向的地址理解_良风抚旧的博客-CSDN博客
②sizeof引用---->引用所指变量大小;sizeof指针------>本指针的大小;
③指针可多级,引用只能一级;
④指针初始化后可以改变,引用不可以改变;
int a = 996;
int *p = &a; // 初始化, p 是 a 的地址
int &r = a; // 初始化, r 是 a 的引用
int b = 885;
p = &b; // 合法, p 更改为 b 的地址
r = b; // 不合法, r 不可以再变
①复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
②复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
③用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。
(30条消息) strcpy和memcpy的区别_memcpy函数和strcpy函数的区别_hustanding的博客-CSDN博客
内存分区的意义是赋予不同的生命周期;
①全局区:包含常量区,存放全局变量、静态变量以及常量,由操作系统释放;
②代码区:存放程序的二进制代码;
③栈区:存放局部变量等,由编译器自动分配内存;
④堆区:程序员手动分配释放;
①申请方式不同:栈由系统自动分配,堆需要手动申请释放
②申请大小限制不同,栈顶和栈底是预设好的,栈是向栈底扩展,大小固定;堆是向高地址扩展,不连续的内存区域,大小灵活可调整;
③申请效率不同,堆操作由函数库提供,分配内存需要算法寻找合适大小的内存,比较慢;操作系统再底层有对栈的支持,所以栈的效率较高较快;
①重载是再同一个作用域下,函数名称相同,参数类型/个数/顺序有所不同(返回值类型不同不属于),属于静态多态;
②重写是发生再子类中覆盖父类中的同名函数,函数特征相同,具体实现不同;被重写的函数必须是virtual虚函数,属于动态多态;
③重定义是子类对父类的有相同名称的非虚成员函数重新定义,函数名必须相同,对函数的返回值、形参列表没有要求;
主要区别就是编译器预处理阶段查找头文件的路径不同;
include<iostream>:一般用于包含标准库头文件,编译器回去系统配置的库环境变量去搜索,即编译器设置的头文件路径-->系统变量;
include"math.h":一般用于包含用户自己编写的同文件,编译器会先在项目的当前目录查找,即头文件目录--->编译器设置的头文件路径--->系统变量;
①new/delete是运算符,malloc/free是标准库函数;
②malloc仅仅分配内存空间,free仅仅回收空间,不具备调用构造和析构函数的功能;
③malloc需要手动计算;new自动计算分配的空间大小;
④new申请内存并初始化,malloc申请内存但不初始化;
⑤new申请内存失败,返回NULL;malloc申请失败返回异常
①静态全局变量:限制作用域,只在定义该变量的源文件内有效;
②静态局部变量:改变局部变量的生存周期,使得该变量存在于定义直到程序运行结束;类内声明,类外初始化;所有对象共享同一份数据
class Data{
public:
static int count ;//静态数据成员
};
int Data::count=0;//静态数据成员定义并初始化
③静态成员函数:所有对象共享同一个函数;静态成员函数不能声明为虚函数、const函数、volatile函数;静态成员函数只能访问静态成员变量;
①修饰变量--->变成常量,不可改变;
②修饰指针
③修饰类对象:对象中的任何成员都不能被修改,并且只有const修饰的成员函数可以调用该对象;
④修饰类中的成员变量:成员变量不可修改,并且只能在构造函数的初始化列表中进行初始化;
⑤修饰类的成员函数:该成员函数不能修改类对象中的成员变量,如果一定要修改,可以使用mutable关键字强制修改;const位置在函数后面
void func() const{
cout<<"114514"<<endl;
}
⑥cosnt修饰函数的形参:意味该变量在函数内部不能被修改;如果函数运行时候被传入的实参是const常量,则形参必须也是const修饰的;
①值传递:形参是实参的拷贝,形参的改变并不会影响实参;
②指针传递:也是值传递的一种,不过形参接收的是实参的地址,被调函数的形参被作为被调函数的局部变量处理,会在栈中开辟空间存放主调函数传入的实参值拷贝值及实参的一个副本,故当形参的指向没有变化时,对形参所指对象进行操作,等价于对实参进行操作;
③引用传递:被调函数的形参也是作为被调函数的局部变量,但对于任何引用参数的处理都会通过间接寻址的方式操作到实参,实际上就是把引用对象的地址放在了所开辟的栈空间中,函数对其形参的操作直接映射到实参上;
指针传递 vs 引用传递:引用的指向不可更改,指针的指向可以更改;
①野指针:没有经过初始化的指针;
②悬挂指针:最初指向的内存被释放后,未被置空的指针;
③两个所指向的都是一块无效内存的指针,访问无效内存都会导致编译出错;
④避免上述情况的发生:定义指针后且在使用之前对指针进行初始化,在内存释放后把指针置空或调用智能指针;
主要区别在访问权限和默认继承权限的不同;struct的默认访问权限和继承权限都是public;而class是private;
作用:类的对象在被创建的时候,编译系统对该对象分配内存空间,并且自动调用构造函数,完成类成员的初始化;
常用写法:
①无参构造:创建一个类没有写任何的构造函数,系统会自动生成默认的无参构造函数,此函数为空;
class Person()
{
public:
Person()
{ cout<<"无参构造函数"<<endl; }
}
②有参构造函数:
class Person()
{
public:
Person(int a)
{
age=a;
cout<<"有参构造函数"<<endl; }
}
③拷贝构造函数:函数参数为对象本身的一个引用,用于根据已存在的对象复制出一个新对象;
class Person()
{
public:
Person(cosnt Person& p)
{
age=p.age;
cout<<"无参构造函数"<<endl; }
}
调用时机:
①使用一个已经创建完毕的对象来初始化一个新对象;
②值传递的方式个i函数参数传值;
③以值的方式返回局部对象;
①浅拷贝:简单的复制拷贝操作;
②深拷贝:在堆区重新申请空间,进行拷贝操作;
拷贝构造函数如果不利用深拷贝在堆区创建新内存,会导致浅拷贝带来的重复释放堆区的问题;
如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题;
作用:用于对类做收尾工作,在对象销毁时,自动调用;只能由一个析构函数,无参;
当程序员不自定义析构函数时,其编译器会自动生成一个析构函数,没有任何操作;
析构函数常被用来释放成员变量中指针变量所指向的内存;
构造函数:虚基类-->基类--->类成员函数--->本类;
析构函数:相反;
封装、继承、多态
①封装:将属性和行为作为一个整体进行封装,将属性和行为加以权限的控制;
②继承:指某个对象可以获取另一个对象的属性和方法,可以无需重新编译源对象的属性和方法;
③多态:多态分为静态多态和动态多态;静态多态包括函数重载和运算符重载;动态多态主要指子类重写父类中的函数;作用是提高程序的复用性,同时提高代码的扩充性和可维护性;
当子类继承父类时,父类中的私有权限也会被继承,但子类访问不到父类私有权限的属性和方法,所有父类被子类继承的私有权限的属性和方法不属于子类的任何一个权限;
①public继承:父类中的访问权限全都不变继承到子类;
②pritected继承:父类中的public会被继承为protected;
③private继承:父类中的public和private都会被即成为private;
两个子类击沉了同一个父类,又有某个类同时继承两个子类;
带来的问题主要是子类继承两份相同的数据,导致资源浪费与无意义;
可以采用虚继承解决问题;
实现动态多态;
子类重写父类的虚函数;本质是覆盖,重写:函数返回值类型 函数名 参数列表完全一致;
本质是非静态成员函数,所以不可和static一起修饰;
再多态中,通常父类中的虚函数的实现毫无意义,主要调用子类重写的内容,因此可以将虚函数改为纯虚函数,这个类也称为抽象类;
声明纯虚函数的目的只是为了让子类只继承父类的函数接口;
抽象类无法实例化对象;
多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码,则需要将父类中的析构函数改为虚析构或纯虚析构;
如果是纯虚析构,这个类就是抽象类,无法实例化对象;
没有个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码,用this指针指向被调用的成员函数所属对象;
用途:
①当形参和成员变量同名时,可用this指针区分;
②在类的非静态成员中返回对象本身,可使用return *this;
①string:是C++风格的一个字符串,本质是一个类,内部封装了很多成员方法:查找find、拷贝copy、删除delete、替换replace、插入insert;
②vector:数据结构和数组非常相似,也称为单端数组;区别在于vector可以动态扩展;并不是在原空间之后继续接新空间,二十重新找更大的内存空间,将原数据拷贝到新空间,释放原空间;
③deque:双端数组,可以对头端进行插入删除操作;
④stack:先进后出数据结构,只有一个出口;栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为;
⑤list: 将数据结构进行链式存储;
⑥set:所有元素都会在插入时自动被排序,底层结构使用二叉树实现;
目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
?作者主页:静Yu?简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者?社区地址:前端知识交流社区?博主的个人博客:静Yu的个人博客?博主的个人笔记本:前端面试题个人笔记本只记录前端领域的面试题目,项目总结,面试技巧等等。接下来会更新蓝桥杯官方系统基础练习的VIP试题,依然包括解题思路,源代码等等。问题描述:给定当前的时间,请用英文的读法将它读出来。时间用时h和分m表示,在英文的读法中,读一个时间的方法是: 如果m为0,则将时读出来,然后加上“o’clock”,如3:00读作“threeo’clock”。 如果m不为0,则将时读出来,然后将分读出来,如5
文章目录华为OD面试流程1.mysql数据库建了两个字段,且设置了联合索引,如果其中有一个字段为空会出现什么问题?2.谈谈springIOC的理解,有什么好处,解决了什么问题3.谈谈springAOP的理解,切面编程有没有实际应用,有哪些注解,作用是什么,有那些应用场景?4.Erika和zookeeper有了解过吗,作用是什么,主要解决了什么问题5.谈谈JDK、JRE、JVM的理解,区别是什么6.谈谈对泛型的理解7.JVM的组成华为OD面试流程机试:三道算法题,关于机试,橡皮擦已经准备好了各语言专栏,可以直接订阅。性格测试:机试技术一面(本专栏核心)技术二面(本专栏核心)主管面试定级定薪发of
最近更新的博客华为OD机试-卡片组成的最大数字(Python)|机试题算法思路华为OD机试-网上商城优惠活动(一)(Python)|机试题算法思路华为OD机试-统计匹配的二元组个数(Python)|机试题算法思路华为OD机试-找到它(Python)|机试题算法思路华为OD机试-九宫格按键输入(Python)|机试算法备考思路华为OD机试-身高排序(Python)|备考思路使用说明参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。华为OD清单查看地址:blog.csdn.net/hihell/catego
前言介绍了网络安全岗位常见的面试题,仅供参考!一、常识部分1.Linux服务器种用户关键信息存储在那个文件中?启动、停止、重启、开机自启mysql服务命令?如何查找/etc/test.txt文件中"password"关键字信息?如何精确查找80端口?/etc/passwdsystemctlstartmysqld或systemmysqldstart 启动systemctlstopmysqld或systemmysqldstop 停止systemctlrestartmysqld或systemmysqldrestart 重启systemctlenablemysqld或systemmysqldenabl
我在之前的面试中遇到了这个问题,但做不到,知道吗?这是做什么的:`$=`;$_=\%!;($_)=/(.)/;$==++$|;($.,$/,$,,$\,$",$;,$^,$#,$~,$*,$:,@%)=($!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$"),$=++;$.++;$.++;$_++;$_++;($_,$\,$,)=($~.$"."$;$/$%[$?]$_$\$,$:$%[$?]",$"&$~,$#,);$,++;$,++;$^|=$";`$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;
最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理已参加机试人员的实战技巧本篇题解:贪心的商人or最大利润题目描述商人经营一家店铺,有number种商品,由于仓库限制每件商品的最大持有数量是item[index],每种商品的价格在每天是item_price[item_index][day],通过对商品的买进和卖出获取利润,请给出商人在days天内能获取到的最大的利润;注:同一件商品可以反复买进和卖出;输入描述3//输入商品的数量nu
前言以下为网络安全各个方向涉及的面试题,星数越多代表问题出现的几率越大,祝各位都能找到满意的工作。注:本套面试题,已整理成pdf文档,但内容还在持续更新中,因为无论如何都不可能覆盖所有的面试问题,更多的还是希望由点达面,查漏补缺。一、渗透测试方向:如何绕过CDN找到真实IP,请列举五种方法(★★★)redis未授权访问如何利用,利用的前提条件是?(★★★)mysql提权方式有哪些?利用条件是什么?(★)windows+mysql,存在sql注入,但是机器无外网权限,可以利用吗?(★)常用的信息收集手段有哪些,除去路径扫描,子域名爆破等常见手段,有什么猥琐的方法收集企业信息?(★★)SRC挖掘与
🖥️NodeJS专栏:Node.js从入门到精通🖥️博主的前端之路(源创征文一等奖作品):前端之行,任重道远(来自大三学长的万字自述)🖥️TypeScript知识总结:TypeScript从入门到精通(十万字超详细知识点总结)🧑💼个人简介:大三学生,一个不甘平庸的平凡人🍬👉你的一键三连是我更新的最大动力❤️!文章目录1、浅拷贝要求思路代码2、简易深拷贝要求思路代码3、完整深拷贝要求思路代码1、浅拷贝要求补全JavaScript代码,要求实现一个对象参数的浅拷贝并返回拷贝之后的新对象。注意:参数可能包含函数、正则、日期、ES6新对象是对对象的参数进行浅拷贝,并不是直接对整个对象进行浅拷贝(整个
目录:导读前言一、测试面试基础题二、测试实战面试题三、测试基础知识点四、总结前言大部分人学软件测试的从业者,在找工作的同时,会因为软件测试面试题挡在门前。……跳槽最重要的一步自然是面试,正值跳槽季,网上出现了各种面试题,一时会让人眼花缭乱,分不清最该看哪个,所以为大家做了一些软件测试面试的真题,想跳槽的小伙伴们,请准备好你的小本本!一、测试面试基础题1、简述测试流程?2、什么是软件测试?软件测试的目的与原则?3、软件生存周期及其模型是什么?4、什么是软件质量?5、自动化测试脚本开发的主要步骤?6、目前主要的测试用例设计方法是什么?7、常见的测试用例设计方法都有哪些?请分别以具体的例子来说明这些