引用和指针初探

引用 &(左值引用--Lvalue reference)

引用即别名(并非对象),引用是一个对象的另外一个名字,且只能是一个对象,所以引用必须被初始化,一但初始化后便不能再改变引用的值,因为引用是很专一的

一般在初始化变量时,初始值会被拷贝到新建的对象中,然而引用只是把它和它的初始值绑定在一起,并不是将初始值拷贝给引用。所以在调用引用的时候能加快程序的运行速度。

引用和取地址符的区分: 引用一般出现在声明语句中,紧跟类型名;取地址符出现在表达式的右边,是一个运算符。

int i = 42;
int &r = i;//&紧随类型名出现,是一个引用
int *p;
p = &i;//&出现在表达式中,是一个取地址运算符

指针 *(pointer)

指针是指向另外一种类型的复合类型,与引用类似,但是指针本身就是一个对象,可以对指针进行赋值和拷贝,而且在指针的生命周期内可以指向几个不同的对象(不专一),指针无需在定义时被初始化,若指针在块作用域内被定义但并没有认为初始化时会自动被初始化,指向不确定的值,这时候调用指针是很危险的。

指针存放的是某个对象的地址。所以指针不能指向引用。因为引用不是对象。

指针类型必须和它指向的对象严格匹配(有两种特殊情况)。

指针值:指针值(即地址)只可能是以下四种情况之一。

1.指向一个对象。

2.指向对象所占空间的下一个地址。

3.空指针,意味着指针没有指向任何对象。

4.无效指针,也就是上述情况外的其他值。

指针和解引用操作符:同引用和取地址操作符,在声明表达式中紧跟类型的 * 是指针,在表达式中是解引用操作符。(解引用操作符只适用于那些确实指向了某个对象的有效指针)。

空指针:空指针的初始化有好几种方式,可以使用预处理变量NULL,字面值0,字面值nullptr来初始化。nullptr是一种特殊的字面值,它可以转换为任意其他的指针类型,是C++11的新特性,建议使用nullptr来初始化空指针。(不能把int变量赋值给指针,即使它的值为0)建议初始化所有指针,避免程序崩溃,并在可能的情况下,先定义对象再定义指向它的指针。

指向指针的引用

指针不能指向引用,但是引用可以指向指针,因为指针是一个对象。

int *p;
int *&r = p;//r是一个对指针p的引用

面对比较复杂的指针和引用的说明语句时,从右向左读有助于理解其真实含义。离变量名最近的符号对变量的类型有最直接的影响,r 最近的符号为 & ,出现在声明中,所以 r 是一个引用,声明符的其余部分用以确定 r 引用的类型是什么,此例中 * 号说明 r 引用的是一个指针,最后基本数据类型部分指出 r 引用的是一个int 指针。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 23:48:54

引用和指针初探的相关文章

把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另一个vector,也是将一个vector 的元素逐个赋值给另一vector 的对应元素: //将一个vector 赋值给另一vector,使用迭代器访问vector 中的元素 vector<int> ivec(10, 20); vector<int> ivec1; for (vecto

java定义类 对象,引用,指针

java是根据面向对象编程,因此有类和对象的概念,类分为普通类与抽象类. 一.定义类 类由N个 构造器  成员变量  方法组成,可以不定义,也可以根据语法定义N个. [修饰符] class 类名{ 构造器*N个 成员变量*N个 方法*N个 } 1.类的修饰符只能是public final abstract 三种之一,或者不修饰 ,类名一般大写开头,驼峰命名 (一).成员变量的定义 [修饰符] 数据类型  变量名 : [修饰符] 数据类型  变量名  = 默认值: 1.修饰符:  可以不写(默认)

C++引用与指针的区别

转!!!! http://blog.csdn.net/wangqiulin123456/article/details/8464418 虽然使用引用和指针都可以间接访问另一个值,但他们之间有两个重要区别: 引用总是指向某个对象,定义引用没有初始化是错误的. 赋值行为的差异,给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另一个对象关联.引用一经初始化,就始终指向同一个特定对象. ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★

引用计数指针

如前面内存泄露中所讲的,引用计数指针可以被复制.因此,一个智能指针的几份拷贝可以指向同一个对象.这就产生了由哪份拷贝负责删除它们共同指向的对象这个问题.答案是这组智能指针中最后消亡的那个将删除它所指向的对象.这类似于家居规则:"最后一个离开屋子的人负责关灯."为了实现这个算法,这些指针共享一个计数器,记录有多少个智能指针引用同一个对象,即"引用计数"这个术语的由来.引用计数的应用范围很广:这个术语简单意味着,编译器具有一个隐藏的整型变量作为计数器.每当有人创建了一个

函数可以返回一个局部对象,而不能返回一个局部对象的引用(指针):

函数可以返回一个局部对象,而不能返回一个局部对象的引用(指针):当函数返回一个局部对象时,虽然这个对象已经释放,但是返回时会产生一个临时的对象.而当返回一个局部对象的引用时,这个对象已经不存在了.这就要求在函数参数中,包含一个引用或指针.int &func(int a,int b,int &retsult){ retsult = a + b; return &retsult}但是如下代码是错误的(返回局部对象的引用)int &func(int a,int b){ int &

引用与指针的区别

引用:相当于给一个变量取的别名,它本身不是一种数据类型,因此不战用存储空间,不能建立数组的引用 引用作为函数参数:当发生函数调用时,用引用作为参数,在内存中并不会产生实参的副本,也不会给引用这个形参分配空间, 而是直接对实参进行操作,但如果用一般变量作为函数参数,则会给它分配空间,并且作为实参的副本,如果 传递的是对象,还将调用拷贝构造函数 引用与指针的区别:相同点:引用与指针都会导致实参对象值的改变 不同点:a.引用不用分配空间,指针要分配空间,且指针作为形参在调用时,必须用变量的地址作为实参

引用 与 指针

我们知道,引用 和 指针都是C++的符合类型之一. 一  关于引用 引用(reference) 是为对象起了另外一个名字,引用类型 引用  另外一种类型. 和初始化变量不同的是, 在定义引用的时候,程序把引用和它的初始值  绑定 在一起,而不是把初始值拷贝给引用.两者是绑定在一起,那么,就可以通过引用去修改初始值: 例: int val = 20; int &ri = val ; ri  = 82; 那么此时val的值也会更改为82,反之成立. 一但初始化完成,引用将和它的初始值对象一直绑定在一

基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------&gt; 可以返回派生类对象的引用或指针

您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责.百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面. 首页 精选版块 移动开发 iOS Android Qt WP 云计算 IaaS Pass/SaaS 分布式计算/Hadoop J

浅谈C/C++引用和指针的联系和区别

为什么C/C++语言使用指针? 答案:①一方面,每一种编程语言都使用指针.不止C/C++使用指针. 每一种编程语言都使用指针.C++将指针暴露给了用户(程序员),而Java和C#等语言则将指针隐藏起来了. "Everything uses pointers. C++ just exposes them rather than hiding them," It's easier to give someone an address to your home than to give a