C++中的指针问题(二)

C++中的指针可以和数组相似,有一维指针,二维指针以及多维指针,甚至也存在指针数组。

  • 二维指针:指向指针的指针,举个简单的例子,某个房间A(变量)里存在一张任务卡,但该房间是锁着的,钥匙(房间A的地址)在另一房间B(一维指针)中,但房间B也是锁着的,钥匙(房间B的地址)再房间C(二维指针)中。如果要拿到任务卡,就可以通过房间C中的钥匙打开房间B再拿到房间A中的钥匙,拿到任务卡。例如:
int a = 5;
int* p1;
p1 = &a;
int** p2;
p2 = &p1;
cout << a << endl;    //直接输出a的值
cout << *p1 << endl;  //通过一维指针间接输出a的值,相当于通过房间B拿钥匙开门
cout << **p2 << endl; //通过二维指针间接输出a的值,相当于通过房间C拿钥匙开房间B的门,再拿到A的钥匙,再开房间A
cout << &a << endl;  //输出a的地址,相当于房间A的钥匙
cout << p1 << endl;  //通过指针输出a的地址,相当于在房间B中的A的钥匙
cout << *p2 << endl; //通过二维指针输出a的地址,相当于先拿到B房间的钥匙,再拿到B房间中的房间A的钥匙

以上输出结果为:

多维指针以此类推,例如可自己思考如何通过三维指针输出某一值。

  • 指针数组:指针数组指的是一个数组,但本质是指针,其定义方法如下:
int* p[5];  //这是一个指针数组,长度为5,相当于5个指针。
  1. 指针数组指向数组时的自增和自减情况。例如:
int array[2][4];  //定义一个二维数组
int* p[2];        //定义一个指针数组
p[0] = &array[0]; //指针数组中的第一个指针指向二维数组的第一行
p[1] = &array[1]; //指针数组中的第二个指针指向二维数组的第二行
for(int i = 0; i < 2; i++)
    for(int j = 0; j < 4; j++)
        array[i][j] = j + i * j; //给二维数组赋值
cout << endl << "----------通过数组输出----------" << endl;
for(int i = 0; i < 2; i++){
    for(int j = 0; j < 4; j++)
        cout << array[i][j] << "\t";
    cout << endl;
}
cout << endl << "----------通过指针数组输出----------" << endl;
for(int i = 0; i < 2; i++){
    for(int j = 0; j < 4; j++)
        cout << *p[i]++ << "\t";   //通过指针的自增按照行的模式输出,即先输出第一行,再输出第二行
    cout << endl;         //行输完后换行再输出下一行
}

输出结果:

自减情况相似。另外可自己思考如何通过指针按列输出,使得输出情况如下:

如有错误,欢迎大家批评与指正!

猜你喜欢

转载自blog.csdn.net/WJ_SHI/article/details/81567646