C++ 初学者指南 第四篇(14)

必备技能4.12:多重指针
    指向指针的指针就是多重指针。如图4-2所示,就普通的指针而言,指针的值是另外一个值的地址。而对指向指针的指针来说,第一个指针的取值是第二个指针的地址,第二个指针才指向变量的存储位置。
    多重指针可以扩展到任何想要的多次指向。但是,通常情况下我们都是不会用到比指向指针的指针更复杂的情况了。过多次数的指针指向会导致程序难以理解并且很容易导致程序出错。
 
图 4-2 单次和多次的指针指向
    指向指针的指针必须按照这样方式进行声明,就是需要在变量的名称前面再增加一个星号。例如,下面的代码告知编译器balance是一个指向int类型指针的指针:
int ** balance;
    变量balance不是一个指向整型数类型的指针,而是一个指向int类型的指针的指针,理解这一点非常重要。当通过指向指针的指针来访问目标值的时候,就需要两次使用*运算符,正如下面的程序所示:
#include <iostream>
using namespace std;

 

int main()
{
    int x, *p, **q;

    x = 10;

    p = &x;

    q = &p;

    cout << **q; //打印出x的值,通过q来访问x的值,这里需要两次使用*运算符

    return 0;
}
   在上面的这段程序中,p被声明为一个指向整型数的指针,q被声明为一个指向整形指针的指针。cout语句将在屏幕上打印出数字10。

专家答疑
问:从前面的学习中可以看出指针的功能是非常强大的。然而指针的错误使用很容易给程序带来灾难性的后果。你有什么建议来避免指针的错误使用?
答:首先,我们必须确保指针变量在使用前是被初始化的。也就是说,我们要确保在使用指针之前,指针已经实际地指向了某个对象。其次,我们要确保指针指向对象的类型和指针的类型是一致的。再次,不要对空指针进行操作。回忆一下,空指针实际上是没有指向任何对象的指针。最后,不要仅仅为了编译通过而对指针进行强制类型的转换。通常,指针类型不匹配的错误意味着我们程序员错误地把一件事情当做了另外的事情。指针类型的强制转换只有在特殊的场合才会用到。

你可能感兴趣的:(C++,存储,扩展,编译器)