首先贴一个链接:如何理解指向指针的指针? 然后强调一下,结合前辈有助于消化指针的指针!!
下面博主动手实践,发此学习贴,希望对大家有些许帮助。
- 首先,定义一下整型常量和整型指针变量:
next,定义指针的指针(双重指针):int i = 4 ,j = 6 ,k = 111; int *iptr = &i, *jptr = &j;
int **doublePtr = &iptr;
-
- 现在指针iptr 指向了i,jptr 指向了 j; *iptr 就是 i,**doublePtr 就是 i,或者说是 4。
- 下面用我们盒子箭头图来描述,像这样:
finally,双重指针令指向jptr :[接着这么写]
*doublePtr = jptr;
-
- 我们把 jptr指向对象地址值赋给 doublePtr 。也就是说 iptr 现在它指向了 j【这个地方最绕!】,指针传递的是实参,相当于iptr所指对象i的地址值被修改成j的地址值,然后按照地址查找对象的值,因而i没变,只是iptr重新指向了一个新的对象而已!而已!
- 全部代码:
贴图验证:打印结果+局部变量截图/* 功能:Excercise3.5.4 */ #include <iostream> using namespace std; //定义在全局作用域中 int main()//定义在局部作用域中的数组 { int i = 4 ,j =6; int *iptr = &i, *jptr = &j; int **doublePtr = &iptr; cout << "指针iptr所指对象在内存中的地址及对象值分别为:" << iptr << " " << *iptr << endl; cout << "指针jptr所指对象在内存中的地址及对象值分别为:" << jptr << " " << *jptr << endl; cout << "指针iptr自身在内存中的地址及值分别为:" << *doublePtr << " " << **doublePtr << endl; *doublePtr = jptr; cout << "指针jptr自身在内存中的地址及值分别为:" << *doublePtr << " " << **doublePtr << endl; cout << "最终验证,经过重新指向后,指针iptr所指对象在内存中的地址及对象值分别为:" << iptr << " " << *iptr << endl; system("pause"); return 0; }