C++知识点2——指针、引用基础
引用:
1.引用就是对象或变量的别名,但引用不是对象或变量
int a=10; int &b=a;
这里面,b就是变量a的另一个名字,对b操作就是对a操作,对a操作,b也会变化
void testreference()
{int a=10;int &b=a;b=5;cout<<a<<b<<endl;a=4;cout<<a<<b<<endl;
}
2.因为引用一定是某个变量的别名,引用一定是和变量绑定在一起的,所以引用必须初始化
int a=10;
int &b;
3.因为引用不是对象,但是引用又要绑定一个对象,所以不能定义引用的引用
int a=10;
int &b=a;
int &(&c)=a;
4.因为操作引用就是操作变量或者对象本身,所以对于内置类型,变量和其引用之间的类型要适配
int a=10;
float &b=a;
5.因为引用必须和变量进行绑定,所以非const引用不能绑定字面值
int a=10;
int &b=20;
所以,引用的基本特性就五个:1.不是对象,2.必须初始化,3.不能定义引用的引用,4.类型适配,5.不能绑定字面值
指针
6.指针就是变量的地址,可以通过引用访问变量,也可以通过指针访问变量,但是指针是对象,而引用不是,这是二者的根本区别
void testpointer()
{int a=10;int *p=&a;int *q;cout<<p<<endl<<q<<endl;
}
通过上述代码,可以知道,指针可以不初始化(只是为了演示,不要这样做),但是引用必须初始化
另外,&符号既能表示引用,也是取地址符号,当&出现在=左侧时,是引用,在=右边就是取地址
7.因为指针是一个对象,所以可以定义指针的指针,但是不能定义引用的引用
void testpointer()
{int a=10;;int *p=&a;int *q;int **pp = &p;cout<<p<<endl<<q<<endl;cout<<pp<<endl;
}
所以,指针的引用的不同点就是:1.引用必须初始化,指针不用,2.可以定义指针的指针,但是不能定义引用的引用,这两点的原因就是指针是变量,而引用不是(只是个别名)
8.指针所指向的数据的类型要和指针的类型一致
float a=10;
int *p=&a;
9.指针的引用
因为指针是对象,引用不是,所以可以定义指针的引用,但是不能定义引用的指针
void testpr()
{int i=0;int *pi=&i;int *&pr=pi;cout<<pr<<endl<<pi<<endl;*pr=4;cout<<i<<endl;
}
int *&pr=pi;说明了如何定义一个指针的引用,可以从右向左读,
先看红色部分,我们知道有个对象叫pr,接着看到蓝色的&,我们知道pr是一个引用,
最后看到int *,就知道这个引用和一个int类型的指针绑定,这是指针就是pi
因为pr是pi的别名,所以对可以通过pr改变i
10.void 型指针
void型指针可以存放任意类型的指针(包括二级指针),但是不能对void型指针解引用,所以void*指针可以保护数据所在的内存不被修改
void testvoidp()
{double d=1.2;double *pd=&d;int i=11;int *pi=&i;void *vp=pi;vp=pd;cout<<__func__<<endl;cout<<*vp;
}
参考:
《C++ Primer》
欢迎大家评论交流,作者水平有限,如有错误,欢迎指出
C++知识点2——指针、引用基础相关推荐
- C语言指针基础知识点(六)--通过指针引用多维数组
指针系列目录 C语言指针基础知识点(一)–指针及指针变量 C语言指针基础知识点(二)–指针变量的引用 C语言指针基础知识点(三)–指针变量作为函数参数 C语言指针基础知识点(四)–通过 ...
- C语言指针基础知识点(四)--通过指针引用数组
指针系列目录 C语言指针基础知识点(一)–指针及指针变量 C语言指针基础知识点(二)–指针变量的引用 C语言指针基础知识点(三)–指针变量作为函数参数 C语言指针基础知识点(四)–通过 ...
- C语言指针基础知识点(七)--通过指针引用字符串
指针系列目录 C语言指针基础知识点(一)–指针及指针变量 C语言指针基础知识点(二)–指针变量的引用 C语言指针基础知识点(三)–指针变量作为函数参数 C语言指针基础知识点(四)–通过 ...
- c语言中通过指针引用数组,C语言基础(二)
指针引用数组 C语言规定:如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素. 引入指针变量后,就可以用两种方法来访问数组元素了.如果p的初值为&a[0],则: p+i和 ...
- 指针,引用及内存基础认识
char型指针在c++里面已经被当成字符串了,打印时候会把指针当做字符串打印,需要打印时候可以转化为void*类型 char c = 'a';char* ptr_char = &c;cout& ...
- C++基础知识 - 指针引用
指针引用 指针变量的定义 int x = 666; int *p = &x;int* &q = p; //定义指针变量的引用 int* &q = p; 这叫做指针的引用. 不要 ...
- 知识点整理,Java基础面试题(一)
写在前面 整理了一些互联网大厂的面试题,这些面试题经常会被问到,也是作为Java工程师需要掌握的一些知识点,毕竟理论和实践的结合,才是王道,分片整理,每天嗑些知识点,快乐每一天,如果对你有帮助,记得点 ...
- 面试准备每日五题:C++(六)——CC++、staticconstextern、sizeof strlen、指针引用、数组指针指针数组函数指针
文章目录 一.C和C++的区别是什么? 二.关键字static.const.extern作用 三.sizeof和strlen的区别 四.指针和引用的区别 五 .指针数组.数组指针.函数指针 一.C和C ...
- Golang struct 指针引用用法(声明入门篇)
Golang struct 指针引用用法 一.前言 入门篇,只包括声明内容,基础的赋值 和 修改值. 个人总结:在 变量访问 struct 结构体时,共有5种不同的方式定义 指针结构体. 个人术语: ...
- 2020-09-25C++学习笔记引用2:二级指针形参与指针形参的使用方法和区别重难点,主看综合代码(1、指针形参2、引用形参3、二级指针形参4、指针引用形参)
2020-09-25C++学习笔记引用2:二级指针形参与指针引用搭配做形参的使用方法区别重难点,注意事项主看综合代码(1.指针形参2.引用形参3.二级指针形参4.指针引用形参) 1.指针引用 #inc ...
最新文章
- 排序 (4)插入排序
- 爆款不是运气:网易产品布局背后的6大标准框架
- JpaSpecificationExecutor
- cocoapods Analyzing dependencies 问题的解决方案
- usr/bin/expect方式免密码登录和发送文件脚本
- SP1043 GSS1 - Can you answer these queries I 猫树
- 以太坊—JSON RPC API
- Documentation/x86/kernel-stacks
- JavaWeb之Servlet:Cookie 和 Session
- Java语言速览:StackOverflow
- 终于搞懂了Java 8 的内存结构,再也不纠结方法区和常量池了!!
- lcx端口转发及远程终端问题
- Kubernetes核心概念总结
- Qt 确认对话框(确定/取消)
- 我们雇佣了一只大猴子
- 基于51单片机GSM模块的家庭防火防盗报警系统
- openwrt运行n2n服务器,Windows下使用N2N搭建局域网,全球局域网(重写)
- 有孚网络与中国科学院虚拟经济与数据科学研究中心签署战略合作协议,推动行业智能化转型加速发展
- hihocoder 1538
- Subclass in C++ - C++ 中的子类