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++:提升_指针的指针和指针的引用 写在前面 今天在使用指针的时候我发现了一个自己的错误.
随机推荐
- LeetCode-156 上下翻转二叉树
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-upside-down 题目描述 给你一个二叉树的根节点 root ,请你 ...
- C# datatable group by分组
DataTable dt = new DataTable(); dt.Columns.Add("A"); dt.Columns.Add("B"); dt.Col ...
- VMware-查看虚拟机版本
[root@localhost /]# uname -a Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22: ...
- VUE学习-列表渲染
列表渲染 v-for <!-- v-for="(v,k,i) in arr/obj" --> <ul id="app"> <li ...
- 探索如何在java中执行python脚本
一个偶然的场景,笔者需要在java代码中执行某个python脚本,并且需要向脚本中传递参数,有可能的话,还要获取该脚本的某些执行结果,回到主程序中继续执行下去. 没有思路之前,狭隘的想法是,java中 ...
- 【Linux】Linux网络编程
socket 默认开启的socket是阻塞的,想要设置非阻塞的话,可以用 fcntl设置为 nonblock:或者使用setsockopt进行更多设置: 一般使用推荐 设成nonblock,然后epo ...
- ps如何正确擦除文字 如何正确用ps擦除文字
1.启动PS:新建文档,进入到软件操作界面中. 2.再把图片素材拖入到PS中.接下来,要把图片上的文字清除掉. 3.按L键,调出套索工具,接着,把文字给框选出来. 4.再按SHIFT+F5调出填充对话 ...
- vue组件自调用
组件自调用 在vue中有些情况下我们会用到组件本身来遍历出自己想要的效果. 其实非常简单,可以在模板中使用name属性值,来调用自己 <template> <el-submenu v ...
- C#常见的数据结构
数据结构:1.Set集合,纯粹的容器,无需存储,就是一个容器2.线型结构:在存储的时候,一对一存储3.树形结构:表达式目录树(二叉树).菜单结构:一对多4.图形结构:扩扑图.网状结构(地图开发,用C# ...
- Java-Collectors.groupingBy
Java中的Collectors类的groupingBy()方法用于按某些属性对对象进行分组并将结果存储在Map实例中. 当我我们想利用它的特性,我们需要指定一个属性来执行分组.此方法提供的函数类似于 ...