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;
  • 相关阅读:
    hdu 4849 Wow! Such City! 简单最短路
    hdu 4856 Tunnels BFS+不回起点的TSP
    django框架之中间件 Auth模块
    django框架之Ajax,自定义分页器...
    django框架之模板层
    django框架之路由层 视图层......
    Django框架之初识
    前端之JavaScript
    项目问题笔记汇总
    最简英语语法
  • 原文地址:https://www.cnblogs.com/qichunlin/p/7853846.html
Copyright © 2011-2022 走看看