zoukankan      html  css  js  c++  java
  • c语言,动态数组

    试着直接malloc一个2*3*4的空间来模拟数组:

    #include <stdio.h>
    #include <malloc.h>
    
    int main(void)
    {
    
        int*** pArr = NULL;
    
        pArr = (int ***)malloc(2*3*4*sizeof(int));
        if(pArr == 0)
        {
            return -1;
        }
        
        memset(pArr, 0, 2*3*4*sizeof(int));
    
        pArr[0][0][1] = 11;
        printf("pArr[0][0][1] = %d
    " , pArr[0][0][1]);
        
        free(pArr);
        pArr = NULL;
    
        return 0;
    }
    /*
    root@oucaijun:/work/dcc# gcc 1.c ;./a.out 
    1.c: In function ‘main’:
    1.c:17: warning: incompatible implicit declaration of built-in function ‘memset’
    Segmentation fault
    
    */
    

      

    创建与释放一个三维数组:

    #include <stdio.h>
    #include <malloc.h>
    
    int*** Malloc3DActiveArray(int*** pArr, int x, int y, int z);
    void Free3DActiveArray(int*** pArr, int x, int y);
    //void Display3DArray(int*** pArr, int x, int y, int z);
    
    
    int main(void)
    {
        int x, y, z;
        int*** array = NULL;
    
        printf("输入一维长度: ");
        scanf("%d",&x);
        printf("输入二维长度: ");
        scanf("%d",&y);
        printf("输入三维长度: ");
        scanf("%d",&z);
    
        array = Malloc3DActiveArray(array, x, y, z);
        printf("1
    ");
        printf("array[0][0][1] = %d
    ", array[0][0][1]);
        Free3DActiveArray(array, x, y);
        array = NULL;
    
        return 0;
    }
    
    int*** Malloc3DActiveArray(int *** pArr, int x, int y, int z)
    {
        int i, j, k;
        pArr = (int ***)malloc(x * sizeof(int **)); //第一维
    
        for (i = 0; i < x; i++)
        {
            pArr[i] = (int **)malloc(y * sizeof(int *));//第二维
            for (j = 0; j < y; j++)
            {
                pArr[i][j] = (int *)malloc(z * sizeof(int));//第三维
                for (k = 0; k < z; k++)
                {
                    pArr[i][j][k] = i + j + k + 1;
                    printf("%d ", pArr[i][j][k]);
                }
                printf("
    ");
            }
            printf("
    ");
        }
        
        return pArr;
    }
    
    void Free3DActiveArray(int*** pArr, int x, int y)
    {
        int i, j;
        for (i = 0; i < x; i++)
        {
            for (j = 0; j < y; j++)
            {
                free(pArr[i][j]);//第三维
                pArr[i][j] = 0;
            }
    
            free(pArr[i]);//第二维
            pArr[i] = 0;
        }
        free(pArr);//第一维
    }
    /*
    root@oucaijun:/work/dcc# gcc 1.c ;./a.out 
    输入一维长度: 1
    输入二维长度: 2
    输入三维长度: 3
    1 2 3 
    2 3 4 
    
    1
    array[0][0][1] = 2
    
    */
    

      

     c语言中内存的动态分配与释放(多维动态数组构建) 

  • 相关阅读:
    mysql数据库之多表查询
    mysql数据库之单表查询
    mysql数据库之表和库
    mysql数据库之windows版本
    mysql数据库之linux版本
    mysql数据库之mysql下载与设置
    python基础之逻辑题(3)
    python基础之逻辑题(2)
    python基础之逻辑题(1)
    spring boot统一异常处理
  • 原文地址:https://www.cnblogs.com/mylinux/p/4674079.html
Copyright © 2011-2022 走看看