栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言二维指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言二维指针

二维指针

什么是二维指针?

一维指针存放变量的地址,二维指针存放一维指针的地址。

int first()
{
    int n = 6, m = 0;
    printf("&n=%pn", &n);
    printf("&m=%pn", &m);

    int *p = &n;
    int **pp = &p;

    printf("n=%dnn=%dn", *p, **pp);
}
//一维指针存放变量的地址,二维指针存放一维指针的地址

二维指针与数组的关系

int second()
{

    // 指针与数组之间关系
    int arr[6] = {1, 2, 3, 4, 5, 6};
    int *p = arr;
    for (int i = 0; i < 6; ++i)
    {
        printf("%dn", p[i]);
    }

    // 二维指针与指针数组之间关系
    int arr2[6] = {7, 8, 9, 10, 11, 12};
    int *parr[] = {arr, arr2};
    int **pp = parr;

    for (int i = 0; i < 2; ++i)
    {
        for (int j = 0; j < 6; ++j)
        {
            printf("%d ", pp[i][j]);
        }
        printf("n");
    }
    printf("--------------n");
    for (int i = 0; i < 2; ++i)
    {
        for (int j = 0; j < 6; ++j)
        {
            printf("%d ", parr[i][j]);
        }
        printf("n");
    }
}

二维指针怎么用

二维指针作为函数参数

//二维指针作为函数参数
void Fun_b(int **pp)
{
    int *p = malloc(sizeof(int));
    *p = 100;
    *pp = p;
    printf("&p=%pnp=%pn*p=%dn", &p, p, *p);
}
int Fun_a()
{
    int *p = NULL;
    Fun_b(&p);
    printf("------%p-----n", &p);
    printf("&p=%pnp=%pn*p=%dn", &p, p, *p);
    free(p);
    p = NULL;
}

二维指针作为函数返回值

创建一个矩阵r*c

int **CreateIdentityMatrix(int r, int c)
{
    int **pm = (int **)malloc(sizeof(int *) * r);
    for (int i = 0; i < r; ++i)
    {
        pm[i] = (int *)malloc(sizeof(int) * c);
        for (int j = 0; j < c; ++j)
        {
            pm[i][j] = (i == j);
        }
    }
    return pm;
}

void PrintMatrix(int **pm, int r, int c)
{
    for (int i = 0; i < r; ++i)
    {
        for (int j = 0; j < c; ++j)
        {
            printf("%d ", pm[i][j]);
        }
        printf("n");
    }
}


int main1()
{
    int r, c;
    scanf("%d%d", &r, &c);
    int **pm = CreateIdentityMatrix(r, c);
    PrintMatrix(pm, r, c);
}

指针数组和二维数组指针

针数组和二维数组指针在定义时非常相似,只是括号的位置不同的区别

int *(p1[5]);  //指针数组,可以去掉括号直接写作 int *p1[5];
int (*p2)[5];  //二维数组指针,不能去掉括号

指针数组和二维数组指针有着本质上的区别:

指针数组是一个数组,只是每个元素保存的都是指针。

二维数组指针是一个指针,它指向一个二维数组。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923360.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号