指针与数组的关系(一维、二维)

版权声明:本文为博主原创,未经博主允许不得转载 https://blog.csdn.net/Sherry_Yue/article/details/83831131

一、指针和一维数组间的关系

前提条件:

int a[10];//元素个数随意自己定
int *p = a;//定义指针时直接初始化,也可以分为两步:int *p; p=a;

第i个元素的地址:

&a[i]    等价于    a+i    等价于    &p[i]    等价于    p+i

第i+1个元素的值:

a[i]    等价于    *(a+i)    等价于    p[i]    等价于    *(p+i)

二、指针和二维数组间的关系

前提条件:(对于二维数组)

int a[2][3];//2行3列

行地址:
a表示二维数组的首地址,第0行的地址
a+i代表第i行的地址,但并非增加i个字节

列地址:
a[i] 或 *(a+i) 代表第i行第0列的地址
a[i]+j 或 *(a+i)+j 或 &a[i][j] 代表第i行第j列的地址

行指针指向的内容:
*(*(a+i)+j) 或 a[i][j] 代表第i行第j列的内容

 列指针指向的内容:
*(a+i*n+j) 或 a[i*n+j] 或 a[i][j] 代表第i行第j列的内容

二维数组的行指针:(逐行查找,逐列查找)

#include <iostream>
using namespace std;

int main()
{
    int a[2][3]={{1,2,3},{4,5,6}};
    int (*p)[3];//(*p)[i]:是定义一个指向含有i个元素的数组的指针,不过要注意,这里“i”应该是一个常量
                //*p[i]:定义元素类型是指针的数组,同样的“i”应该是整型
    p=a;//用行地址初始化
    for(int i=0;i<2;++i)
    {
        for(int j=0;j<3;++j)
            cout<<*(*(p+i)+j)<<" ";
        cout<<endl;
    }
    return 0;
}

二维数组的列指针:(逐个查找,相对偏移量)

#include <iostream>
using namespace std;

int main()
{
    int a[2][3]={{1,2,3},{4,5,6}};
    int *p;
    p=*a;
    for(int i=0;i<2;++i)
    {
        for(int j=0;j<3;++j)
            cout<<*(p+i*3+j)<<" ";
        cout<<endl;
    }
    cout<<endl;//另外一种表示方法
    for(int i=0;i<2;++i)
    {
        for(int j=0;j<3;++j)
            cout<<p[i*3+j]<<" ";
        cout<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Sherry_Yue/article/details/83831131