首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

《小弟我的第一本C++书》节选:7.1.3 指向指针的指针

2014-01-05 
《我的第一本C++书》节选:7.1.3指向指针的指针http://www.chenlq.net7.1.3指向指针的指针指针变量可以指向整

《我的第一本C++书》节选:7.1.3 指向指针的指针

http://www.chenlq.net
7.1.3  指向指针的指针

指针变量可以指向整型变量、字符类型变量等基本数据类型的变量,也可以指向指针类型变量。当指针变量用于指向指针类型变量时,称为指向指针的指针变量。这句话虽然有些像绕口令,但其实可以这样理解:指针也是一个变量,在内存中的某个地址存放着这个变量。当有另外指针指向这个地址时,这个指针就是我们所说的指向指针的指针了。怎么?还是难以理解?没有关系,下面来看一个实际的例子:
 

int N = 2;
int* pN = &N;
int** ppN = &pN;

在这段代码中,首先定义了一个整型变量N,然后定义了一个整型指针指向这个变量N。换句话说,这个指针的值就是整型变量N在内存中的地址。最后,指向指针的指针登场了,我们用“**”定义了一个指向pN指针的指针,ppN中保存的就是pN指针变量的地址,也就是它指向这个整型指针。图7-2展示了这三个变量之间的内存关系。

clip_image002

图7-2  指向指针的指针 从图7-2中可以看到,变量N保存在0016FA38这个内存位置,而pN这个指针变量保存的是N所在的内存位置0016FA38,同时,它自己保存在0016FA5C这个内存位置。同理,作为指向pN的指针,ppN这个指针变量保存的是pN所在的内存位置0016FA5C。简单来讲,普通指针指向的是一个具体的数据,而指针的指针所指向的是一个指针。 在C++中,可以用下面的语法形式来声明一个指向指针的指针: 数据类型标识符** 指针变量名 其中,数据类型表示它所指向的指针的数据类型。例如:
1

int** ppN = &pN;

这样就定义了一个指向整型指针的指针ppN,它指向另一个指针变量pN,而pN指针变量又指向一个整型变量。 指向指针的指针通常用来访问指针数组。数组可以保存基本数据类型的数据,同样,它也可以保存指针,保存指针的数组称为指针数组。如果要访问一个指针数组,使用指向指针的指针最为方便。例如:
 

// 这是一个指针数组,其中保存各个常量字符串的首地址
char* arrMonth[]={"Jan","Feb","Mar","Apr","May","Jun",
    "Jul","Aug","Sep","Oct","Nov","Dec"};  
// 定义一个指向指针的指针
// 这里数组的首地址arrMonth就是数组的第一个元素,
// 也就是指向第一个字符串“Jan”的指针
char** pMonth = arrMonth;
// 获取用户输入
int   nIndex;
cout<<"请输入月份的数字:"<<endl;
cin>>nIndex;
// 对指针进行运算,使其指向相应的数组元素,
// 也就是相应的字符串指针
char* pCurMonth = *(pMonth + ( nIndex - 1 ));
cout<<"对应的月份是:"<<pCurMonth<<endl;

在以上这段代码中,首先定义了一个指向字符型指针的指针pMonth,并将字符串数组的首地址赋值给它,让其指向字符串数组的第一个元素。然后通过对pMonth进行运算,让其偏转指向数组中所对应的其他元素,这时“pMonth + ( nIndex – 1 )”就是指向这个字符串指针的指针。

我们可以把某种类型的指针理解为某种新的数据类型。

[解决办法]
这个分享。。。

热点排行