zoukankan      html  css  js  c++  java
  • 17. 堆上的二维空间与二维数组的异同的代码展示

    二维数组与堆的二维空间的异同
    堆上的二维空间,并不一定就是二维数组,只是具有数组的访问形式,但是其已经远远不是数组的定义了

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 #if 1
     5 /*在堆上创建一个内存分布与二维数组相同的二维空间,一级指针作为返回值*/
     6 
     7 void* alloc2dSpace(int base,int row,int line)
     8 {
     9     void *p = malloc(base*row*line);
    10     return p;
    11 }
    12 
    13 int main(void)
    14 {
    15     /*创建一个3*5*int的二维空间*/
    16     int (*p)[5] = alloc2dSpace(sizeof(int),3,5);
    17 
    18     /*使用方式与对二维数组的访问方式完全相同*/
    19     //初始化
    20     int i,j;
    21     for(i = 0;i<3;i++)
    22     {
    23         for(j = 0;j<5;j++)
    24         {
    25            // *(*(p+i)+j) = i+j;
    26             p[i][j] = i+j;
    27         }
    28     }
    29     //打印
    30     for(i = 0;i<3;i++)
    31     {
    32         for(j = 0;j<5;j++)
    33         {
    34            //printf("%d",*(*(p+i)+j) );
    35             printf("%d",p[i][j] );
    36         }
    37         putchar(10);
    38     }
    39     /*释放*/
    40     free(p);p = NULL;
    41 
    42 
    43     return 0;
    44 }
    45 #endif
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #if 1
     4 /*在堆上创建一个内存分布与二维数组不同与指针数组相同的二维空间,二级指针作为返回值,但在表面使用上却与二维数组访问方式相同,*/
     5 void** alloc2dSpace(int base,int row,int line)
     6 {
     7     void ** p = (void**)malloc(sizeof(int*)*row);
     8     int i;
     9     for(i = 0;i< row;i++)
    10     {
    11         p[i] = malloc(base*line);
    12     }
    13     return p;
    14 
    15 }
    16 
    17 int main(void)
    18 {
    19     int **p = alloc2dSpace(sizeof(int),3,5);
    20 
    21     /*使用方式与对二维数组的访问方式完全相同*/
    22     //初始化
    23     int i,j;
    24     for(i = 0;i<3;i++)
    25     {
    26         for(j = 0;j<5;j++)
    27         {
    28            // *(*(p+i)+j) = i+j;
    29             p[i][j] = i+j;
    30         }
    31     }
    32     //打印
    33     for(i = 0;i<3;i++)
    34     {
    35         for(j = 0;j<5;j++)
    36         {
    37            //printf("%d",*(*(p+i)+j) );
    38             printf("%d",p[i][j] );
    39         }
    40         putchar(10);
    41     }
    42 
    43     /*释放,由内而外释放*/
    44     for(i = 0;i<3;i++)
    45     {
    46         free(*p+i);
    47         //free(p[i]);
    48     }
    49     free(p);
    50 
    51     return 0;
    52 }
  • 相关阅读:
    *args, **kwargs
    python format函数
    python自省
    生成器与迭代器
    python面试题
    xpath和gzip
    python正则表达式
    cookie
    random
    杭电1710 (已知二叉树前中序 求后序)
  • 原文地址:https://www.cnblogs.com/ZhuLuoJiGongYuan/p/9465062.html
Copyright © 2011-2022 走看看