C语言二维指针

二维指针

什么是二维指针?

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

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

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

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

二维指针与数组的关系

int second()
{

    // 指针与数组之间关系
    int arr[6] = {1, 2, 3, 4, 5, 6};
    int *p = arr;
    for (int i = 0; i < 6; ++i)
    {
        printf("%d\n", 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=%p\np=%p\n*p=%d\n", &p, p, *p);
}
int Fun_a()
{
    int *p = NULL;
    Fun_b(&p);
    printf("------%p-----\n", &p);
    printf("&p=%p\np=%p\n*p=%d\n", &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];  //二维数组指针,不能去掉括号

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

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

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

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值