【C++自我精讲】基础系列一 指针与引用

【C++自我精讲】基础系列一 指针与引用
0 前言

指针、引用、指针与引用区别。

1 指针

变量:代码中常常通过定义变量来申请并命名存储空间,并通过变量的名字来使用这段存储空间。

//变量
int nNum;    //声明名字为nNum的int型存储空间
nNum = 100;  //nNum存储值100
nNum = 200;  //改变nNum存储值200

 指针:又叫一级指针,用来指示一个内存地址的变量。对于一个类型T(int、char、folat...),T*就是指向T的指针类型,一个T*类型的变量保存了一个T对象的地址。

//指针
int *pNum;   //定义指针pNum
pNum = &nNum;//pNum指向变量nNum在内存中的地址,而不是变量本身的值200(取地址运算符&:取变量的地址。如:&nNum为取变量nNum的地址)
int nNum1 = *pNum; //取指针pNum指向存储空间值200(指针运算符*:从地址中取数据。如:*pNum为从地址pNum中取值)

 指针变量:指针是地址,指针变量是存放地址的变量。

//指针变量
int *pVar = pNum;//等同int *pVar = &nNum;

二级指针:指向指针变量的指针。

//二级指针
int **ppNum = pVar;//

 用一张图表示下二级指针:

 

C是常量;B是一级指针,B的值(即C的地址)是一级指针数据;A是二级指针,A的值(即B的地址)是二级指针数据。

空指针:不指向任何对象,指针变量值为NULL。指针为空的判断常常为了避免指针变量的非法使用。

int *pNum = NULL;
...
if(NULL != pNum)
{
    ...
}

 函数指针:是指向函数的指针变量。可用该指针变量调用函数,就如同用指针变量引用其他类型变量一样。

 函数指针声明格式:类型说明符 (*函数名)(参数)  

//函数min
int min(int x,int y);
//函数max
int max(int x,int y);
//函数指针
int (*pFun)(int, int);

//使用函数指针调用函数
int nNumMin = 1;
int nNumMax = 100;
int nMin = 0;
int nMax = 0;
pFun = min;
nMin = (*pFun)(nNumMin,nNumMax);//nMin = 1;
pFun = max;
nMax = (*pFun)(nNumMin,nNumMax);//nMax = 100;

指针函数:函数的返回值类型是一个指针类型,本质是一个函数。

指针函数声明格式:类型说明符 *函数名(参数)  或 类型说明符 *(函数名(参数))

int *pfun(int, int);//pfun是一个指向返回值为int的函数的指针
2 引用

引用:是对象的别名,对引用的操作与对变量的直接操作一样。其主要用于函数参数和返回值类型,T&表示T类型的引用。引用不是数据类型,引用本身不占存储空间。

int i = 100;
int &j = i;//&为标识作用,非取地址
3 指针与引用区别

1)指针可以指向空值,引用不能。如果一个变量指向另一个对象,它可能为空,应该用指针;它不允许为空,应该使用引用。

2)指针可以改变指向,引用不可以改变指向。引用初始化以后不能被改变,指针可以改变所指的对象。

3)指针的大小是固定字节(4个字节),引用的大小是所指变量的大小。

posted on 2013-06-30 23:56  joinclear  阅读(2240)  评论(7编辑  收藏  举报