【c】二维数组与二级指针

源码

1. 主要

#include <stdio.h>
#include <stdlib.h>

#define ROW (5)
#define COL (2)

int main(void){

    int arr[ROW][COL] = {{1,5},{2,6},{3,7},{4,8},{5,9}};

    /* 1.1 DEF int**  */
    int **p = (int **)malloc(sizeof(int *) * ROW);

    /* 1.2 DEF int*  */
    for (int i=0 ; i<ROW ; ++i){
        p[i] = (int *)malloc(sizeof(int)*COL);
    }

    /* 2. init int* */
    for (int i=0 ; i<ROW ; ++i){
        for (int j=0 ; j<COL ; ++j){
            p[i][j] = arr[i][j];
        }
    }

    /* 3.1 free int* */
    for (int i=0 ; i<ROW ; ++i){
        free(p[i]);
    }
	/* 3.2 free int** */
	free(p);
	
    return  0;
}


2. 全部

#include <stdio.h>
#include <stdlib.h>

#define DEBUG

#ifdef DEBUG
#include <assert.h>
#endif

#define ROW (5)
#define COL (2)

int main(void){

    int arr[ROW][COL] = {{1,5},{2,6},{3,7},{4,8},{5,9}};

    /* 1.1 DEF int**  */
    int **p = (int **)malloc(sizeof(int *) * ROW);
#ifdef DEBUG
    assert(p);
#endif

    /* 1.2 DEF int*  */
    for (int i=0 ; i<ROW ; ++i){
        p[i] = (int *)malloc(sizeof(int)*COL);
#ifdef DEBUG
        assert(p[i]);
#endif
    }

    /* 2. init int* */
    for (int i=0 ; i<ROW ; ++i){
        for (int j=0 ; j<COL ; ++j){
            p[i][j] = arr[i][j];
        }
    }
#ifdef DEBUG
    printf("before array  : ");
    for (int i=0 ; i<ROW ; ++i){
        for (int j=0 ; j<COL ; ++j){
            printf("%d,",arr[i][j]);
        }
    }
    printf("\n");
    printf("after pointer : ");
    for (int i=0 ; i<ROW ; ++i){
        for (int j=0 ; j<COL ; ++j){
            printf("%d,",p[i][j]);
        }
    }
    printf("\n");
#endif

    /* 3.1 free int* */
    for (int i=0 ; i<ROW ; ++i){
        free(p[i]);
    }
	/* 3.2 free int** */
	free(p);
	
    return  0;
}


小结

  1. 定义指针
    1.1 先定义二级指针
    1.2 再定义一级指针
  2. 初始化数据
    2.1 初始化一级指针
  3. 寻址
    3.1 利用二级指针与一级指针访问数据
  4. 释放
    4.1 free()一级指针
    4.2 free()二级指针

remark:
内存分布,数据大小,这也是数组为什么只能忽略第一维大小的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过得精彩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值