C++ Primer笔记(2.3.3)——指向指针的指针
#include<iostream>
/*****************************************************************************/
/* 一般来说,声明符中修饰符的个数并没有限制。当有多个修饰符连写在一起时, */
/* 按照其逻辑关系详加解释即可。以指针为例,指针是内存中的对象,像其他对象 */
/* 一样也有自己的地址,因此允许把指针的地址再存放到另一个指针当中。 */
/*****************************************************************************/
int main()
{
/* ----- 指向指针的指针 ----- */
//通过*的个数可以区分指针的级别。也就是说,**表示指向指针的指针,
//***表示指向指针的指针的指针,以此类推。
int ival = 1024;
int *pi = &ival; //pi指向一个int型整数
int **ppi = π //ppi指向一个int型的指针
std::cout << "ival的值为:" << ival << std::endl;
std::cout << "pi 的值为:" << pi << " pi 指向的值为:" << *pi << std::endl;
std::cout << "ppi 的值为:" << ppi << " ppi指向的值为:" << *ppi << std::endl;
std::cout << "ppi指向的值指向的值为:" << **ppi << std::endl;
std::cout << std::endl;
/*********************************************************/
/* 此处pi是指向int型数的指针,而ppi是指向int型指针的指针 */
/* */
/* -------- -------- -------- */
/* | ppi | --> | pi | --> | 1024 | */
/* -------- -------- -------- */
/* */
/*********************************************************/
/* -------------------------- */
/* ----- 指向指针的引用 ----- */
//引用本身不是一个对象,因此不能定义指向引用的指针。但指针是对象,所以存在对指针的引用
int i = 42;
int *p; //p是一个int型指针
int *&r = p; //r是一个对指针p的引用
r = &i; //r引用了一个指针,因此给r赋值&i就是令p指向i
*r = 0; //解引用r得到i,也就是p指向的对象,将i的值改为0
std::cout << "p的值为:" << p << " p指向的值为:" << *p << std::endl;
std::cout << "r的值为:" << r << " r指向的值为:" << *r << std::endl;
/* -------------------------- */
return 0;
}