《程序员面试宝典》C/C++数组指针和指针数组

4.8.2数组指针和指针数组
(1)数组指针
顾名思义,就是指向数组的指针,因此表示的是一个指针,这个指针指向一个数组,例如:int (*p)[],这里p就是指向了一个8个int型元素的数组。

#include<iostream>
#include<stdio.h>
using namespace std;
void main()
{
    int (*p)[4];
    int a[3][4] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 0, 1, 2, 3 } };
    cout << a[0] << endl; //0095FA6C
    cout << a[0][0] << endl;//1

    p = &a[0];
    cout << p << endl; //0095FA6C
    cout << *p << endl;//0095FA6C
    for (int i = 0; i < 8; i++)
    {
        cout << (p)[i] << " ";
        cout << (*p)[i] << " ";
    }
}

循环体中的结果分别是0095FA6C 1, 0095FA7C 2,0095FA8C 3,0095FA9C 4,…
注意到一开始p和*p都等于0095FA6C的指针,而(p)[i]依次是按四位递增的指针,p一开始指向数组首地址,(*p)[i]是依次是按一位递增指针指向的数组元素,*p一开始指向数组第一个元素的地址。具体过程见下图:
这里写图片描述

(2)指针数组
就更简单了,就是指针的数组,表示一个指针,包含的元素是指针,就像你定义一个整型数组,包含的是整型数据一样。例如:int* p[8],这里p是一个包含8个int型指针的数组。

猜你喜欢

转载自blog.csdn.net/wangshuailpp/article/details/79965078