指针、引用、指针与引用区别。函数
变量:代码中经常经过定义变量来申请并命名存储空间,并经过变量的名字来使用这段存储空间。spa
//变量 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中取值)
指针变量:指针是地址,指针变量是存放地址的变量。code
//指针变量 int *pVar = pNum;//等同int *pVar = &nNum;
二级指针:指向指针变量的指针。对象
//二级指针 int **ppNum = pVar;//
用一张图表示下二级指针:blog
C是常量;B是一级指针,B的值(即C的地址)是一级指针数据;A是二级指针,A的值(即B的地址)是二级指针数据。内存
空指针:不指向任何对象,指针变量值为NULL。指针为空的判断经常为了不指针变量的非法使用。it
int *pNum = NULL; ... if(NULL != pNum) { ... }
函数指针:是指向函数的指针变量。可用该指针变量调用函数,就如同用指针变量引用其余类型变量同样。class
函数指针声明格式:类型说明符 (*函数名)(参数) 基础
//函数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的函数的指针
引用:是对象的别名,对引用的操做与对变量的直接操做同样。其主要用于函数参数和返回值类型,T&表示T类型的引用。引用不是数据类型,引用自己不占存储空间。
int i = 100; int &j = i;//&为标识做用,非取地址
1)指针能够指向空值,引用不能。若是一个变量指向另外一个对象,它可能为空,应该用指针;它不容许为空,应该使用引用。
2)指针能够改变指向,引用不能够改变指向。引用初始化之后不能被改变,指针能够改变所指的对象。
3)指针的大小是固定字节(4个字节),引用的大小是所指变量的大小。