前面已经讲过C++指针的概念,指针是一个特殊变量,里面保存了一个内存地址。
那么指针本身占了多大内存呢? 在32位平台上是 32位(4字节),在64位平台上就是 64 位。
我们通过代码来看一下指针的寻址方式。
int a[5] = { 1,2,3,4,5 };
int *p = a;
for(i=0;i<5;i++)
{
(*p)++; // 通过(*)取值
p++; // 下一个地址
}
说白了,指针本身就是一个内存地址,这个地址可以通过变量的 取地址符号(&)来获得:
int nFirstTime = 1;
int nLastTime = 100;
int *p = &nFirstTime; // 取地址
(*p) = 10; // now firstTime = 10
p = &nLastTime; // 重新取地址
在代码中你可能会遇到这样的概念,即 指针的指针(**)或者指针的引用(*&),来看例子:
char Arr1[16][16]; // 生成16*16的二维数组
int **pArr2 = new int*[16]; // 在堆上声明16*16的数组
for(int i=0;i<16;i++)
{
pArr2[i] = new int[16];
}
// 通过下标访问
pArr2[i][j];
// 对应删除方式
for(int i=0;i<16;i++)
{
delete[] pArr2[i];
}
delete[] pArr2;
// 指针的引用
void getName(char*& _name)
{
_name = "linolzhang";
}
// 指针的指针
void getName(char** _name)
{
*_name = "linolzhang";
}
char *strName = NULL;
getName(strName); // now strName = "linolzhang"
getName(&strName); // 同上
记住地址的概念,深刻理解一下上面的例子,回头一切了然。