C语言学习笔记21——多维数组和多维指针

多维指针:(指向指针的指针)

在C语言中:

  • 指针的本质是变量

  • 指针会占用一定的内存空间

  • 可以定义指针的指针来保存**指针变量的地址值

  • 为什么需要指向指针的指针

    • 指针变量也同样存在传值调用传址调用
/*
    测试代码
    重置动态空间的大小
*/

#include <stdio.h>
#include <malloc.h>

int reset(char** p, int size, int new_size)
{
    int ret = 1;
    int i = 0;
    int len = 0;

    char* pt = NULL;
    char* tmp = NULL;
    char* pp = *p;

    if((p != NULL) && (new_size > 0))
    {
        pt = (char*)malloc(new_size);

        tmp = pt;

        len = (size < new_size) ? size : new_size;

        for(i = 0; i < len; i++)
        {
            *tmp++ = *pp++;
        }

        free(*p);
        *p = pt;
    }
    else
    {
        ret = 0;
    }

    return ret;
}

int main()
{
    char* p = (char*)malloc(5);

    printf("%p\n", p);

    if(reset(&p, 5, 3))
    {
        printf("%p\n", p);
    }

    free(p);

    return 0;
}

二维数组

  • 二维数组在内存中以一维的方式排布

  • 二维数组中的第一维是一维数组

  • 二维数组中的第二维才是具体的值

  • 二维数组的数组名可看做为常量指针

数组名

  • 一维数组名代表数组首元素的地址

  • 二维数组名同样代表数组首元素的地址

int a[5]a的类型为 int*
int a[2][5]m 的类型为 int(*)[5]

结论:

  1. 二维数组名可以看做事指向数组的常量指针
  2. 二维数组可以看做是一维数组
  3. 二维数组中的每个元素都是同类型的一维数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值