指针和引用来说都是属于“指向(point to)”的方式;
引用是以“&”地址符号来对其赋值和声明;
例如int& nRefValue = nVal; nRefValue即为nVal的一个引用,也可以说nRefValue是nVal的一个别名;
例如void CalculateMax(int* pIntArray,int nArraySize,int& nMaxValue);中nMaxValue作为一个引用参数,在函数栈空间建立的引用变量可以修改对应的实参;
指针也是实现了对其他对象的间接访问;指针内存放的是执行变量的内存地址;可以赋值和拷贝;
指针的声明:例如int* pIntBuf;声明了pIntBuf为int类型的指针,pIntBuf指向了Int型的对象;那么从该指针位置的四个字节就可以解读为int型数值;
不同类型的指针一般不能进行赋值,除非进行强制转换或者使用转换符号reinterpret_cast,或者父子类之间的转换dynamic_cast;
指针可以看做类似int、double等的基本类型;只是其中存放内容不一样和功能不一样;
指针内存放的地址可以配合“*”符号进行解读,也成为取地址符;
例如:int a = 10;
int* pInt = &a;
*pInt = 20;
则a = 20;
对指针的修改:
1)对指针内存放的地址的修改;
2)对指针指向的对象的修改;
该类型与const和配合产生了4中组合,也是面试和笔试常考的内容;
int *const pInt;
int const* pInt;
const int * pInt;
cosnt int * const pInt;
既然指针可以做基础类型来使用,那么它拥有基础类型的所有属性;
不同的指针类型:
1)指向对象的指针;
2)指向指针的指针;
3)指针数组;
4)指向指针数组的指针;
int *p[5]; for (int i = 0; i < 5; i++) { p[i] = new int[10]; } int*(*q)[5]; q = &p;
其中int *(*q)[5];声明了一个指向含有5个int * 的元素的数组;