入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

指针和引用---int*、int&、int*&、int&*、int**

创建时间:2013-06-30 投稿人: 浏览次数:1608

int i;

int *a = &i;//这里a是一个指针,它指向变量i

int &b = i;//这里b是一个引用,它是变量i的引用,引用是什么?它的本质是什么?下面会具体讲述

int * &c = a;//这里c是一个引用,它是指针a的引用

int & *d;//这里d是一个指针,它指向引用,但引用不是实体,所以这是错误的


相信很多CPPers跟我一样,曾经在指针和引用里徘徊了很久很久。经常弄混指针和引用,尤其是见到如题中列出那些用法,着实是伤脑经。

后来,在项目中用着用着,就能搞清楚区别了,算是会用吧。然而,对于一个Programmer,最忌讳的就是不知其所以然,会用和懂是两番天地。停留在会用的人,始终是原地打转;而懂的人,一通百通,能举一反三。

本文,就如题的指针和引用的用法做一个介绍。

首先我们来普及一下概念,说明一下什么是指针和引用,这里借用一下变量名作为过渡。

     ■指针 ---- 指向某一块内存的变量,其本身存储的信息就是内存地址的首地址,其类型决定指向内存的大小。
            比喻,超市的储物柜。我记住我放包的柜子在第一排右起第三个,这里的1-3就是一个地址,通过地址,我可以找到柜子。这里的地址就是一个指针。

     ■变量 ---- 某一块内存地址数据值的名字
            比喻,超市的储物柜。我记住我放包的柜子上有一张贴纸,上面写着18,通过18,我可以找到柜子。这里的18,就是变量名了。

     ■引用 ---- 变量的别名
            比喻,超市的储物柜。柜子的贴纸上面写着18,但是18不好记,我用谐音记忆法,把18想成“要发”,通过“要发”,也可以找到柜子。这里“要发”就是一个引用。

通过上面的比喻可以看出来,要找到柜子,有三种方法:

1. 第一排右起第三个                      地址(指针)
2. 柜子贴纸上号为18的                    变量名
3. “要发”                              引用

理解了指针、引用的概念,我们来看看它们的使用吧,这里以经典的值交换为例,来说明int、int*、int&、int*&、int&*、int**。

1. int

双击代码全选
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <iostream>     usingnamespace std;                 voidswap1(inta, intb){         inttmp;         tmp = a;         a = b;         b = tmp;     }     intmain(){         inta = 1;         intb = 2;         swap1(a, b);         cout<<"a = "<<a<<endl;         cout<<"b = "<<b<<endl;         system("pause");         return0;     }

交换失败。基础牢靠的同学一眼就看出来,这样的交换只是交换了形参的值,是无法达到交换值的效果的,这段程序很简单,不做细说。

2. int*

双击代码全选
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <iostream>    usingnamespace std;               voidswap2(int*a, int*b){        inttmp;        tmp = *a;        *a = *b;        *b = tmp;    }               intmain(){        inta = 1;        intb = 2;        swap2(&a, &b);        cout<<"a = "<<a<<endl;        
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。