malloc函数创建二维数组的几个小方法

一.malloc函数利用数组指针创建二维数组


   定义形式: int (*p)[4] = (int(*)[4])malloc(3*4*sizeof(int));

注解:1.(*p)指针代表总共有三层(0,1,2),每一层都是一个int*的指针。

           2.   int (*p)[4]代表每一个int* 指针都指向了四个int类型的空间。

           3.   所以总共有12个int类型的空间,构成一个3行4列的二维数组。

#include <stdio.h>
#include <stdlib.h>//malloc函数头文件
#include <string.h>//memcpy函数头文件

// malloc函数利用数组指针创建二维数组的子函数
void fund(int(*p)[4],int i,int j)
{
    for(int i = 0;i < 3;i++)
    {
        for(int j = 0;j < 4;j++)
        {
            printf("%d\t",p[i][j]);
        }
        printf("\n");
    }
}

int main(int argc, char const *argv[])
{  
    // malloc函数利用数组指针创建二维数组
    int (*p)[4] = (int(*)[4])malloc(3*4*sizeof(int));

    
    int arr[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
    memcpy(p,arr,sizeof(arr));
    
    int i,j;
    // for(i = 0;i < 3;i++)
    // {
    //     for(j = 0;j < 4;j++)
    //     {
    //         printf("%p\t",&p[i][j]);
    //     }
    //     printf("\n");
    // }

    fund(p,i,j);

    free(p);
    p = NULL;
    
    return 0;
}

二.malloc函数利用双指针创建二维数组

定义形式:

                 三行: int **ptr1 = (int **)malloc(3*sizeof(int));

                 四列:ptr1[i] = (int *)malloc(4*sizeof(int));

#include <stdio.h>
#include <stdlib.h>//malloc函数头文件
#include <string.h>//memcpy函数头文件


// malloc利用双指针创建二维数组的子函数
void func(int **ptr,int row,int col)
{
    for(int i = 0;i < row;i++)
    {
        for(int j = 0;j < col;j++)
        {
            printf("%d\t",ptr[i][j]);
        }
        printf("\n");
    }
}

int main()
{
    // malloc利用双指针创建二维数组
    // malloc实参是以字节为单位,相当于一维数组
    int *ptr = malloc(3*sizeof(int));

    for(int i = 0;i < 3;i++)
    {
        ptr[i] = i;
    }

    // 将malloc转为二维数组
    // 三行
    int **ptr1 = (int **)malloc(3*sizeof(int));
    for(int i = 0;i < 3;i++)
    {
        for(int j = 0;j < 4;j++)
        {
            // 四列
            ptr1[i] = (int *)malloc(4*sizeof(int));
        }
    }
    int count = 0;
    int i,j;
    for(i = 0;i < 3;i++)
    {
        for(j = 0;j < 4;j++)
        {
            ptr1[i][j] = count++;
        }
    }

    func(ptr1,i,j);

    free(ptr1);
    ptr1 = NULL;
    
    return 0;
}

三.malloc函数利用一级指针创建二维数组

定义形式:int *ptr = (int *)malloc(3*4*sizeof(int));

#include <stdio.h>
#include <stdlib.h>//malloc函数头文件
#include <string.h>//memcpy函数头文件


/* 使用malloc利用一级指针创建二维数组 */
void fung(int *ptr,int i,int j)
{
    for(int i = 0;i<3;i++)
    {
        for(int j = 0;j<4;j++)
        {
            printf("%d\t",ptr[i*4+j]);
        }
        printf("\n");
    }

}


int main(int argc, char const *argv[])
{
    // 申请堆空间
    int *ptr = (int *)malloc(3*4*sizeof(int));
    
    if(ptr == NULL)
    {
        printf("error!");
        return -1;
    }
    
    int i,j;
    int count = 0;
    // 给二维数组赋值
    for(i = 0;i<3;i++)
    {
        for(j = 0;j<4;j++)
        {
            ptr[i*4+j] = count++;
        }
    }
    // 调用函数
    fung(ptr,i,j);
    //用完清空堆空间
    free(ptr);
    ptr = NULL;
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值