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++:提升_指针的指针和指针的引用 写在前面 今天在使用指针的时候我发现了一个自己的错误.
随机推荐
- Kafka主题,分区,副本介绍
介绍 今天分享一下kafka的主题(topic),分区(partition)和副本(replication),主题是Kafka中很重要的部分,消息的生产和消费都要以主题为基础,一个主题可以对应多个分区 ...
- ubuntu系统的虚机 迁移到大厂的云服务器 后发现 实例内网一直都是原虚机的内网IP,
ubuntu SMC迁移 后发现 实例内网一直都是原虚机的内网IPip a能看到现在的ECS内网以及原虚机的内网 但是ifconfig看只有原虚机的内网IP于是 尝试dhclient eth0重启内网 ...
- win10bug可导致系统崩溃
1.使用浏览器访问访问路径:\\.\globalroot\device\condrv\kernelconnect会立刻导致系统崩溃.会影响Windows10 1709及以上版本 2.使用以下代码保存成 ...
- Mysql数据库基础第四章DDL(数据定义语言):库表的管理、数据类型与约束条件
Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...
- 判断js对象每个字段是否为空
for(var key in obj) { if (!obj[key])return; }
- bootstrapTable的一些属性
url : 'firmSoftTable.action', // 请求后台的URL(*) method : 'post', // 请求方式(*)post/get contentType: " ...
- 七、25.创建user子分支并把代码推送到码云仓库中
打开终端点击+新建一个终端 注意 :如下操作都是在2:powershell下进行 先来检查一下当前所处分支 git branch 我们应该把这些代码都写到user分支上 接下来应该把这些代码统一迁移到 ...
- JAVA丑数
leetcode题目链接 有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数.注意,不是必须有这些素因子,而是必须不包含其他的素因子.例如,前几个数按顺序应该是 1,3,5,7,9,15, ...
- linux下安装mysql的方式
总体来说,mysql安装有两种方式,一个是源码安装,另一个是使用官方编译好的二进制文件安装. 1.使用rpm方式安装 原文地址:https://blog.csdn.net/liuxw1/article ...
- springboot集成xxl-job问题
Client-error:unknown code for readObject at 0x3c (<) 原因之一是classNotFoundRxception :com.caucho.hess ...