zoukankan      html  css  js  c++  java
  • 2017.11.17 C++系列---用malloc动态给c++二维数组的申请与释放操作

    方法一:利用二级指针申请一个二维数组。

    #include<stdio.h>    
    #include<stdlib.h>    
    int main()    
    {    
        int **a;  //用二级指针动态申请二维数组    
        int i,j;    
        int m,n;    
        printf("请输入行数
    ");    
        scanf("%d",&m);    
        printf("请输入列数
    ");    
        scanf("%d",&n);    
        a=(int**)malloc(sizeof(int*)*m);    
        for(i=0;i<m;i++)    
        a[i]=(int*)malloc(sizeof(int)*n);    
        for(i=0;i<m;i++)    
        {  
            for(j=0;j<n;j++)    
            {  
                printf("%p
    ",&a[i][j]);     //输出每个元素地址,每行的列与列之间的地址时连续的,行与行之间的地址不连续  
            }  
        }  
        for(i=0;i<m;i++)    
        free(a[i]);  
      
        free(a);    
        return 0;    
    } 
    

    方法二:用数组指针形式申请一个二维数组。

    #include<stdio.h>    
    #include<stdlib.h>       
    int main()    
    {    
        int i,j;    
        //申请一个3行2列的整型数组    
        int (*a)[2]=(int(*)[2])malloc(sizeof(int)*3*2);    
        for(i=0;i<3;i++)    
        {  
            for(j=0;j<2;j++)    
            {    
                printf("%p
    ",&a[i][j]);  //输出数组每个元素地址,每个元素的地址是连续的  
            }  
        }  
      
      
        free(a);  
        return 0;    
    }    
    

    方法三:用一个单独的一维数组来模拟二维数组。

    #include <stdio.h>  
    #include <stdlib.h>    
    int main()  
    {  
        int nrows,ncolumns;  
        int *Array;  
        int i,j;  
        printf("please input nrows&ncolumns:
    ");  
        scanf("%d%d",&nrows,&ncolumns);  
        Array=(int *)malloc(nrows*ncolumns*sizeof(int));   //申请内存空间  
        for(i=0;i<nrows;i++)  
        {  
            for(j=0;j<ncolumns;j++)  
            {  
                Array[i*ncolumns+j]=1;  
                printf("%d ",Array[i*ncolumns+j]);   //用Array[i*ncolumns+j] 访问第i,j个成员  
            }  
            printf("
    ");  
        }  
        free(Array);  
        return 0;  
    }  
    

    两种方法:
    1、先定义一个一维数组的类型,然后再用该类型定义一个一维数组(实际上已经成为二维的)
    相当于递归定义

           typedef int array[COL];       //使用typedef定义一个具有COL个元素的数组类型
           array *a; //定义二维数组,与一维数组相同
           a=new array[row]; //为该一维数组(实际上二维)申请空间
                   
      该方法定义的动态二维数组的释放只需以下语句即可:
           delete[] a;
           a=NULL;
    

    2、 使用数组指针,分配一个指针数组,将其首地址保存在b中,然后再为指针数组的每个元素分配一个数组

           int **b=new int*[row];       //分配一个指针数组,将其首地址保存b中                                                     
           for(i=0;i<row;i++)             //为指针数组的每个元素分配一个数组
               b[i]=new int[col];
          
        该方法定义的动态二维数组的释放需先释放指针数组的每个元素指向的数组,然后再释放该指针数组:
           for(i=0;i<row;i++)
           {
                 delete [col]b[i];
                 b[i]=NULL;
           }
           delete [row]b;
           b=NULL;
  • 相关阅读:
    我孤独吗?我软弱吗?
    DataGrid 中的 HyperLinkColumn 如何传递多个参数?(未整理)
    C# 获取 MAC地址!
    (文本)文件操作
    ioninfinitescroll实现上拉分页加载更多
    前端面试题:防抖的实现
    vue 传送门功能,实现模态窗口
    前端面试题:节流的实现( 减少一段时间的触发频率)
    vue中的render函数
    ionic5实现tab栏切换效果
  • 原文地址:https://www.cnblogs.com/qichunlin/p/7853846.html
Copyright © 2011-2022 走看看