关于数组指针和指针数组的一些理解

指针数组和数组指针的本质

指针数组

本质上就是一个数组
数组的内容是指针
声明方式

int *a,*b,*c;
int *p[10] = {a,b,c};

原因:在c中[]的优先级比*要高,p优先与[]结合,形成一个数组,int * 则是修饰这个数组元素的类型

数组指针

本质上就是一个指针
这个指针指向数组(好像也叫行指针)
声明方式

int a[6] = {0};
int (*p)[6] = &a;

原因:()将p和 * 结合到了一起,表明p是一个指针
int []说明了p这个指针指向的是一个int数组

例子代码

用数组指针管理二维数组空间

这里的p指向a[0]这个一维数组
p = a 等价于 p = &a[0]
p[0] == *p 描述的是一个一维数组
p[0][0] == **p 描述的是一个元素

#include <stdio.h>
int main()
{
    int a[6][10];
    for(int i = 0;i < 6;i++)
        for(int j = 0;j < 10;j++)
            a[i][j] = i * 6 + j;
    int (*p)[10] = a;//数组指针
    //相当于 p = &a[0];
    for(int i = 0;i < 6;i++)
        for(int j = 0;j < 6;j++)
        {
            printf("%-3d",p[i][j]);
            if(j == 5)
                printf("\n");
        }
    return 0;
}

用数组指针管理内存

指针数组

#include <stdio.h>
int main()
{
    int a[6][10];
    for(int i = 0;i < 6;i++)
        for(int j = 0;j < 10;j++)
            a[i][j] = i * 6 + j;
    int *p[6];
    for(int i = 0;i < 6;i++)
        p[i] = a[i];
    for(int i = 0;i < 6;i++)
        for(int j = 0;j < 6;j++)
        {
            printf("%-3d",p[i][j]);
            if(j == 5)
                printf("\n");
        }
    return 0;
}

在这里插入图片描述

发布了39 篇原创文章 · 获赞 4 · 访问量 5762

猜你喜欢

转载自blog.csdn.net/weixin_45725137/article/details/105093510
今日推荐