c++ 引用 指针。
一、什么是引用(reference) ?已经存在的对象的另外一个名字。
引用有什么特别的?
1.引用在定义时,以&开头。
2.引用不是对象,只能绑定在对象上。所以必须在初始化的时候,指定引用绑定的对象。而且引用绑定是不可以改变的。
int val = 0; int &refVal = val;
不允许这样初始化 int &refVal;
3.就像使用变量名一样,对引用赋值,实际上是给该引用绑定的对象赋值,获取引用的值,也同样是获取与该引用绑定的对象的值。
int &refVal2 = refVal ;// refVal2绑定到了val上面。 int copyVal = refVal; // 初始化copeVal为val的值。
二、什么是指针(pointer)? 存放着某个对象所在地址的对象。
和引用的区别是,指针是对象,可以被更改。不必须初始化,尽管一般会初始化以规避一些问题的出现。
1.指针在定义时,以*开头。赋值时需要使用取地址符(&)来得到某个对象的地址。在C++中,相同的符号,在不同的情况使用,意义不同,就像不同的符号。
int val = 0; int *p = &val; //p存放val的地址, 即 p是指向val的指针。指针类型一般必须和指向的对象类型完全一致。
2.如何通过指针来得到指针指向的对象的值,以及改变该对象的值?如何获取指针中的地址?
可以用解引用符(*)获取指针指向的对象的值,给解引用的指针赋值,就是给被指针指向的变量赋值。
直接获取指针的值,就是获取指针存放的地址。


储存常量地址的指针,必须使用指向常量的指针(pointer to const)
const int num =0;
const int *p = # //底层const
但是常量指针可以指向非常量的对象。(不变的是指针所存放的地址,而不是指针指向的对象)
double pi = 3.14159;
double *const pd = π//顶层const,不可以修改指针的值
pi = 1.26;//ok。
*pd = 3.14;//ok, 指向非常量对象的指针可以用来修改对象的值
顶层const和底层const的区别究竟在哪里?
int num = 3;
const int *p_i = # //底层const,不代表它指向的值一定是const.
num = 2;//ok,*p_i ==2 now
//*p_i = 1;//wrong ,不可通过底层const指针修改指向的对象的值。
int num2= 3;
p_i = &num2;//底层const指针可以重新赋值其他地址。
int *const p_t = &num2;
//p_t = #//wrong,read-only 不可以修改顶层指针的地址。
*p_t = 1;//ok,可以通过顶层指针修改对象的值。
const int *const p_m = &num2;
//*p_m = 1;//wrong ,底层+顶层const指针。
int *p_w;
p_w = p_t;//ok,顶层指针可以被赋值给普通int指针。
//p_w = p_i;//wrong ,底层指针不可以被赋值给没有底层const资格的指针
c++ 引用 指针。的更多相关文章
- perl5 第十二章 Perl5中的引用/指针
第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用 子程序模板七.数组与子程序八.文件句 ...
- C++ const 引用 指针
先简单回忆一下常量的性质: int main() { const int buffSize = 512; buffsize = 512; //× buffSize是常量 } 初始化时: const i ...
- 引用&指针交换函数实践
实践如下: #include <iostream> using namespace std; // 普通交换,注意这里的ab值,在具体调用时是基本数据的拷贝,原始数据不会变化 // 因此这 ...
- c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针
1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] ...
- C++ Primer 第二章 引用 指针 const限定符
1.引用: 为对象起了另外一个名字,引用类型引用另外一种类型,通过将声明符写成&d的形式来定义引用类型,其中d也就是声明的变量名(声明符就是变量名). PS:1.通过图片中编译所提示的报错信息 ...
- C++引用指针 & 构造函数
近来回转 C++的学习,脑子又被搞得了一团迷(简直不要忘得太快..... ) 过后静下来想一想,还是因为有些东西没搞清楚导致,所以理了理两个容易搞迷糊的地方. 1. 引用与指针 C++进行传值更 ...
- 子类父类(虚函数下的 引用指针 对象)->看来没有子类指针这回事
#include<iostream> using namespace std; class Father { public: Father() { cout << " ...
- python3.x 类似cpp引用指针传参修改
#同名局部变量调用外部全局变量: num=100def fun(): global num#告诉编译器是全局的num num+=100 print(num)print(fun)print(fun()) ...
- C++ 引用 指针 使用举例
1. 请看下程序 inline void CScanLineFill::removeOldNodeAET(AET* &aetList, const float yCurrent) { AET* ...
- C/C++:提升_指针的指针和指针的引用
C/C++:提升_指针的指针和指针的引用 写在前面 今天在使用指针的时候我发现了一个自己的错误.
随机推荐
- 富士胶片2105N打印机安装说明
打开驱动文件,执行软件 自定义安装驱动 手动输入IP地址 下一步安装完成 自定义安装扫描软件 选择print & scan 下一步安装完成
- Linux 磁盘扩容
原文链接:https://blog.csdn.net/zzq100zzq/article/details/125178843 一.查看系统磁盘1.使用df -hl ,查看系统的磁盘使用情况二.linu ...
- CF1753C Wish I Knew How to Sort
正解: 这场我打过,E 题没做出来. 状态:\(dp_i\) 表示前 \(x\) 个有 \(i\) 个 \(0\),剩余步数的期望,\(x\) 为原序列 \(0\) 的个数. 转移:\(dp_i = ...
- DRF排序
排序 对于列表数据,REST framework提供了OrderingFilter过滤器来帮助我们快速指明数据按照指定字段进行排序. 使用方法: 在类视图中设置filter_backends, 使用 ...
- MS14-064/CVE-2014-6332漏洞复现(OLE远程代码执行漏洞、IE浏览器漏洞)
漏洞介绍:MS14-064 Microsoft Internet Explorer Windows OLE Automation Array Remote Code Execution,主要利用IE浏 ...
- leetcode 跳跃游戏系列
55. 跳跃游戏 能跳一个范围,贪心 class Solution { public: bool canJump(vector<int>& nums) { int m = 0; / ...
- Spring全家桶(二)之SpringMVC总结
SpringMVC面试题 关于Spring,SpringMVC,SpringBoot三者的源码等解析,会在博客园上详细整理! 这个仅仅是面试题整理 SpringMVC工作原理 1.是否需要在类路径中使 ...
- wireshark作业
1Wireshark基本操作: 1.启动wireshark,正确选择混杂模式,访问任意网站: 2.设置过滤器呈现本地和该网站服务器之间的交互报文: 3.保存抓包结果文件.cap: 4.在作业纸上记录下 ...
- mongodb下载和安装
首先我们去官网下载压缩包 https://www.mongodb.com/download-center/community 然后把文件解压出来 解压出来的文件可以看到里面是没有data和logs,m ...
- certutil工具使用和bypass学习
乌鸦安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站.服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作.利用此文所提供 ...