C++: 21---引用和指针

一般说到谁和谁怎么样,要么说两者的相似点,要么两者的区别,这里我们也要说二者的区别和联系,同时,也不仅仅是区别和联系这么简单,因为你可能会发现在变量赋值,函数传参这两点还是有很多值得品一品的。 

最直观的赋值方面的区别

首先我们先说二者的区别和联系。

(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:

int a=1;int *p=&a;

int a=1;int &b=a;

上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。

而下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单

元。

(2)引用不可以为空,当被创建的时候,必须初始化,而指针可以是空值,可以在任何时候被初始化。

(3)可以有const指针,但是没有const引用;

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

(5)指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;

(6)指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了。

(7)”sizeof引

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle数据库Date类型查询问题(

浅谈Oracle数据库Date类型查询问题用过Oracle数据库的朋友应该知道&#xff0c;Oracle数据库在以Date类型为查询条件时存在一个小小的BUG&#xff0c;如&#xff1a;select * from tableName where createDate > to_date(2007-01-01,yyyy-mm-dd) and createDate < to_dat…

(二十二)深入浅出TCPIP之实战篇—用c++开发一个http服务器

在当前的网络编程专栏前十几篇文章里&#xff0c;我已经说明了TCPIP常用的一些原理&#xff0c;那么接下来我将逐步进入到实战编程阶段&#xff1a;本篇文章我将带大家用C做一个http服务器。既然想实现一个http服务器&#xff0c;首先必须要熟悉的就是http协议知识&#xff0c;…

C++:19---重载与模板、模板特例化

一、重载与模板 函数模板可以被另一个模板或一个普通非模板函数重载如果涉及函数模板,则函数匹配规则会有以下的约束:如果同样好的函数中只有一个是非模板函数,则选择此函数如果同样好的函数中没有非模板函数,而有多个函数模板,则其中一个模板比其他模板更特例化,则选择此…

leetcode159. 至多包含两个不同字符的最长子串

给定一个字符串 s &#xff0c;找出 至多 包含两个不同字符的最长子串 t 。 示例 1: 输入: "eceba" 输出: 3 解释: t 是 "ece"&#xff0c;长度为3。 示例 2: 输入: "ccaabbb" 输出: 5 解释: t 是 "aabbb"&#xff0c;长度为5。 思…

C++:17---函数指针

一、格式 指针名前*号,并且将*和指针名用括号括起来例如: //指针名为pf,指向一个返回值为bool,参数为两个const string&的函数 bool (*pf)(const string&, const string&); //这个不是函数指针,而是一个返回值为bool*的pf函数 bool *pf(const string&, co…

leetcode161. 相隔为 1 的编辑距离

给定两个字符串 s 和 t&#xff0c;判断他们的编辑距离是否为 1。 注意&#xff1a; 满足编辑距离等于 1 有三种可能的情形&#xff1a; 往 s 中插入一个字符得到 t 从 s 中删除一个字符得到 t 在 s 中替换一个字符得到 t 示例 1&#xff1a; 输入: s "ab", t …

C语言-- 大端小端详解

一、什么是大端和小端 所谓的大端模式,就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。 所谓的小端模式,就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 简单来说:大端——高尾端,小端——低尾端 举个例子,比如数字 0x12 34 56 78…

leetcode164. 最大间距 借桶思想秒掉hard题

给定一个无序的数组&#xff0c;找出数组在排序之后&#xff0c;相邻元素之间最大的差值。 如果数组元素个数小于 2&#xff0c;则返回 0。 示例 1: 输入: [3,6,9,1] 输出: 3 解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。 示例 2: …

C++:18---函数模板(template)

一、模板的定义 template<typename T>以关键字template开头,后面跟一个模板参数列表,列表里面用逗号将多个模板参数隔开定义的注意事项模板的编译 当编译器遇到一个模板定义时,并不生成代码。只有当实例化处模板的一个特定版本时,编译器才会生成代码重点:通常,当我…

leetcode167. 两数之和 II - 并没有那么easy的easy题

给定一个已按照升序排列 的有序数组&#xff0c;找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2&#xff0c;其中 index1 必须小于 index2。 说明: 返回的下标值&#xff08;index1 和 index2&#xff09;不是从零开始的。 你可以假设每…

C++:21---仿函数

什么是仿函数 所谓的仿函数(functor),是通过重载()运算符模拟函数形为的类。 因此,这里需要明确两点: 1 仿函数不是函数,它是个类; 2 仿函数重载了()运算符,使得它的对你可以像函数那样子调用(代码的形式好像是在调用函数)。 假设有一个vector<string>,你的任务…

C++:20---类模板(template)

一、类模板与模板类 类模板:一个模板(是模板)模板类:调用类模板生成的类对象(是类实体),也称为类模板的实例化类模板的定义: 与函数模板的定义是一样的template <typename T> class Blob { public: Blob(); Blob(std::initializer_list<T> i); };模板类的使…

leetcode340. 至多包含 K 个不同字符的最长子串

给定一个字符串 s &#xff0c;找出 至多 包含 k 个不同字符的最长子串 T。 示例 1: 输入: s "eceba", k 2 输出: 3 解释: 则 T 为 "ece"&#xff0c;所以长度为 3。 示例 2: 输入: s "aa", k 1 输出: 2 解释: 则 T 为 "aa"&am…

Redis线上救命丸:01---误操作AOF、RDB恢复数据

Redis的flushall/flushdb命令可以做数据清除&#xff0c;对于Redis的开发和运维人员有一定帮助&#xff0c;然而一旦误操作&#xff0c;它的破坏性也是很明显的。怎么才能快速恢复数据&#xff0c;让损失达到最小呢&#xff1f;本文我们将结合之前学习的Redis相关知识进行分析&…

Log4j使用总结

一、介绍Log4j是Apache的一个开放源代码项目&#xff0c;通过使用Log4j&#xff0c;我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等&#xff1b;我们也可以控制每一条日志的输出格式&#xff1b;通过定…

C语言: GDB调试技术(一)

启动GDB的方法有以下几种: 1、gdb <program> program也就是你的执行文件,一般在当然目录下。’ 例如我写了一个简单的helloword程序 #include <stdio.h> int main(){int a = 1;char* ch = "hello world";printf("%s\n",ch);return 0; }那么我…

C语言: ---windows下VS Debug调试

首先我先列出来常用的一些命令或者键盘控制: F5 开始调试,执行到断点 Shift + F5 停止调试 F9 在光标所在行添加断点 Shift + F9 QuickWatch Shift Ctrl F9 delete all 断点 F10 单步执行 F11 进入调用的函数 Shift F11 跳出这次调用的函数 另外还可以用Disable all breakpoi…

leetcode350. 两个数组的交集 II

给定两个数组&#xff0c;编写一个函数来计算它们的交集。 示例 1: 输入: nums1 [1,2,2,1], nums2 [2,2] 输出: [2,2] 示例 2: 输入: nums1 [4,9,5], nums2 [9,4,9,8,4] 输出: [4,9] 说明&#xff1a; 输出结果中每个元素出现的次数&#xff0c;应与元素在两个数组中出…

C语言: ---Linux下ulimit是什么鬼

其实ulimit的讲解不属于C或者C++ 语言范畴,他只是在我们日常开发或者线上linux运行环境不可缺少的工具。 比如我们要查看服务器崩溃的core文件,允许core文件产生,都需要ulimit -c命令调整。 比如我们设置的当前运行环境的栈空间过小,容易产生栈溢出,那么我们…

C语言: ---gdb查看内存和寄存器内容

gdb没有CodeWarrior强大,但是也提供了查看寄存器的命令:(gdb) info register r1r1 0xbffffb40 3221224256(gdb) info registersr0 0x1000052c 268436780r1 0xbffffb40 3221224256r2 0x48026ea0 1208118944r3 …