文档章节

C++引用和指针

椰子Ashkin
 椰子Ashkin
发布于 2014/04/06 12:24
字数 549
阅读 71
收藏 6

引用

      引用就是对象的另一个名字(即别名),因为引用只是它绑定的对象的另一个名字,作用在引用上的所有操作事实上都是作用在该引用绑定的对象上,所以,引用在定义的时候必须初始化且类型一致,不然编译器会报错。

int val = 42;
int &refVal1 = val;       //正确,引用的定义和初始化
int &refVal2;            //错误,引用必须初始化
int &refVal3 = 42;        //错误,必须用对象来初始化引用。
double &refVal4 = val;    //错误,引用


指针

       通俗来说,指针保存的是一个对象的地址。在使用指针时,既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的变量或函数的值。

int val = 42;
int *p1;                //定义一个整型指针
double *p2;            //定义一个双精度浮点型指针
p1 = &val;              //正确,指针p1初始化为val
p2 = &val;              //错误,指针和其指向的对象的类型必须一致


引用和指针的区别

        指针和引用都可以间接访问另一个值,但他们有两个重要的区别(C++ Primer P171):

        1.引用在定义的时候必须初始化,但指针没有要求

        2.引用赋值修改的是它所关联的对象的值,并不是使用引用于另一个对象关联。引用一经初始化,就始终指向同一个对象。

指针赋值:

int val1 = 1024, val2 = 2048;
int *p1 = &val1, *p2 = &val2;
p1 = p2;             //现在p1和p2都指向val2,但val1并没有修改

赋值结束后,变化的是p1所指向的对象。p1在赋值以前,它所指向的是val1的地址,赋值以后,p1指向了val2所在的地址。*p1和*p2都等于2048。

引用赋值:

int val1 = 1024, val2 = 2048;
int &r1 = val1, &r2 = val2;     //引用必须初始化
r1 = r2;                          //r1所引用的对象val1的值变成了2048

引用赋值修改了引用所关联对象的值,而不是本身。赋值以后,r1和r2所关联的对象都没有改变。

© 著作权归作者所有

椰子Ashkin
粉丝 0
博文 2
码字总数 682
作品 0
广州
程序员
私信 提问
一个C#开发者重温C++的心路历程

前言 这是一篇C#开发重新学习C++的体验文章。 作为一个C#开发为什么要重新学习C++呢?因为在C#在很多业务场景需要调用一些C++编写的COM组件,如果不了解C++,那么,很容易注定是要被C++同事忽...

kiba518
05/20
0
0
C++ 智能指针

智能指针(Smart Pointer),是一个来用存储指向动态分配(堆)对象指针的类。简单的说,它本身是一个类,这个类是用来存储对象指针。 一、智能指针的介绍 智能指针,就是具备指针功能同时提...

长平狐
2013/01/06
854
0
C# vs C++之二:GC vs RAII

C# vs C++之二:GC vs RAII 资源管理 C中资源管理极为繁琐易错,大多复杂C系统都面临内存泄露、悬挂指针等问题 一方面由底层语言特点决定;另一方面也由于C语言特性相对较少,严重依赖程序员...

ddatsh
2011/06/28
1K
6
C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast

C++强制类型转换:staticcast、dynamiccast、constcast、reinterpretcast 1. c强制转换与c++强制转换 c语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression//转换...

shzwork
03/12
12
0
C/C++ 之 C++强制类型转换(static_cast、dynamic_cast、const_cast、reinterpret_cast)

文章转载自:https://www.cnblogs.com/chenyangchun/p/6795923.html 。在了解这块时,发现了这篇文档,感觉写的很不错! c强制转换与c++强制转换 c 语言强制类型转换主要用于基础的数据类型间...

ZCShouCSDN
2018/12/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 不要在领导修风扇的时候打开电扇

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :《Whats Up》 主唱妹子 Lina Perry 的嗓音实在太有力了,收放自如的自信才能唱出这么优秀的歌吧!#今日歌曲推荐# 《Whats Up》-...

小小编辑
今天
11
0
SpringBoot集成Elasticsearch并进行增删改查操作

一、创建工程 使用IntelliJ创建SpringBoot工程 SpringBoot版本为2.0.4 ElasticSearch为5.6.10 删掉蓝框中的文件(如上) 最后我们的目录结构(如下) 下面pom文件主要修改的是把spring boot从Int...

一字见心
今天
5
0
x001-版本介绍

python版本介绍 目前有2 和 3 有很多企业用的代码是2版本,随着技术的发展,以后用3的会成为大趋势 python3的安装 yum -y install wget gcc zlib-devel bzip2-devel openssl-devel ncurses-d...

侠客行之石头
今天
5
0
聊聊rocketmq的TransientStorePool

序 本文主要研究一下rocketmq的TransientStorePool TransientStorePool rocketmq-all-4.6.0-source-release/store/src/main/java/org/apache/rocketmq/store/TransientStorePool.java publi......

go4it
昨天
6
0
笔记

场外借贷, 质押 ,托管, 永续合约. 场外借贷,n签合同. 新功能 证券交易组负责中信证券机构及个人投资交易相关系统,服务机构及个人投资客户, 涉及到两融、期权、 期货、做市等境内境外创新业...

MtrS
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部