申请并返回堆空间上的二维空间

二维空间和二维数组都有二维的逻辑,但是二维数组是连续的,二维空间不一定是连续的,我们可以申请连续的二维空间,也可以申请不连续的二维空间,下面来介绍两种申请并返回二维空间的方法:

申请并返回连续的二维空间,这个就是使用指针数组来管理连续的二维空间。

 1 #include <stdio.h>
 2 #include<stdlib.h>
 3 int main(void)
 4 {
 5     int (*p)[5]=(int (*)[5])malloc(sizeof(int)*3*5);
 6     int i=0,j=0;
 7     for(i=0;i<3;i++)
 8         for(j=0;j<5;j++)
 9         {
10             p[i][j]=i*j;
11         }
12     for(i=0;i<3;i++)
13         for(j=0;j<5;j++)
14         {
15             printf("%d\t",p[i][j]);
16         }
17     return 0;
18 }

申请并返回不连续的二维空间,原理是先使用二级指针指向一个空间。,里面存储的全部是一级指针,再分别让这些一级指针指向一个一维空间,这样那个二级指针所指向的或者说所管理的就是二维空间。

 1 #include <stdio.h>
 2 #include<stdlib.h>
 3 int **allocMem(int base, int row, int line)
 4 {
 5     int **p=(int **)calloc(sizeof(int *),row);
 6     int i=0;
 7     for(i=0;i<row;i++)
 8     {
 9         p[i]=(int *)calloc(line,base);
10     }
11     return p;
12 }
13 int main(void)
14 {
15     int base=sizeof(int);
16     int row=3,line=5;
17     int **p=allocMem(base,row,line);
18     int i=0,j=0;
19     int k=0;
20     for(i=0;i<row;i++)
21         for(j=0;j<line;j++)
22         {
23             p[i][j]=k++;
24         }
25     for(i=0;i<row;i++)
26         for(j=0;j<line;j++)
27         {
28             printf("%d\t",p[i][j]);
29         }
30     return 0;
31 }
时间: 2024-10-19 10:02:54

申请并返回堆空间上的二维空间的相关文章

初学JAVA——栈空间堆空间的理解

1.Person pangzi;    //这是在“开拓空间”于栈空间 pangzi=new Person();    //这是赋值于堆空间 上两步就是在做与空间对应的事. 2.值类型直接存入栈空间,如AF,引用类型存入堆空间,在栈空间存有“索引地址”,如当需要B时,在栈空间寻找“索引地址”后对应寻找堆空间的“详细内容”. 故,值类型“快”,引用类型“灵活”. 例String S = “ABCDEFG........Z",则S对应栈空间,“ABCDEFG........Z"对应堆空间.

如何让类对象只在栈(堆)上分配空间?(转)

转自:http://blog.csdn.net/hxz_qlh/article/details/13135433 在C++中,类的对象建立分为两种,一种是静态建立,如A a:另一种是动态建立,如A* ptr=new A:这两种方式是有区别的. 1.静态建立类对象:是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数 形成一个栈对象.使用这种方法,直接调用类的构造函数. 2.动态建立类对象,是使用new运算符将对象建立在堆空间中.这个过程分为

如何限制一个类对象只在栈(堆)上分配空间?

最近做了一道题:在C++中,为了让某个类只能通过new来创建(即如果直接创建对象,编译器将报错) 其实该问题等同于如何限制一个类对象只在栈(堆)上分配空间? 一般情况下,编写一个类,是可以在栈或者堆分配空间.但有些时候,你想编写一个只能在栈或者只能在堆上面分配空间的类.这能不能实现呢?仔细想想,其实也是可以滴. 在C++中,类的对象建立分为两种,一种是静态建立,如A a:另一种是动态建立,如A* ptr=new A:这两种方式是有区别的. 1.静态建立类对象:是由编译器为对象在栈空间中分配内存,

你必须知道的指针基础-8.栈空间与堆空间

一个由C/C++编译的程序占用的内存分为以下几个部分: 1.栈区(stack):又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈. 2.堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表. 3.全局区(static):也叫静态数据内存空间,存储全局变量和静态变量,全局变量和静态变量的存储是放一块的,初始化的全局变量和静态变量放一块区域,没有初始化的在相邻

从G1设计到堆空间调整

引言:如果你在使用Java8,或者计划使用Java9,有很大可能是要么在评估G1垃圾收集器,要么已经在使用它.本文将从G1设计开始向您介绍系统介绍G1垃圾收集器如何工作,助您更加系统的学习了解G1.本文选自<Java性能调优指南>. G1设计 G1将Java堆分成多个分区.分区的大小可以依据堆的尺寸而改变,但必须是2的幂,同时最小为1MB,最大为32MB.由此得出可能的分区尺寸是1 MB.2MB.4 MB.8 MB.16 MB和32MB.所有分区的大小都一样,在JVM运行过程中它们的尺寸也不会

关于栈空间和堆空间的问题

操作系统对于内存的两种管理方式 如鹏网 <C语言也能干大事>http://www.rupeng.com/Courses/Index/12 第三章透彻讲指针 之  第 15 节: 栈空间 平时我们定义的变量都是分布在栈空间里,如下面的程序所示 1 #include <stdio.h> 2 int main(int argc, char *argv[]) 3 { 4 int i=5; 5 char s[] = "afasdfsfwfw"; 6 return 0; 7

堆表上的唯一与非唯一非聚集索引的区别

在这篇文章里,我想详细介绍下SQL Server里唯一与非唯一非聚集索引的区别.看这个文章前,希望你已经理解了聚集和非聚集索引的概念,还有在SQL Server里是如何使用的. 很多人对唯一和非唯一索引非聚集索引的认识都不是很清晰.事实上,SQL Server在存储上这2类索引有着本质的区别,这些区别会影响到索引占用空间的大小和索引的使用效率. 今天我们从SQL Server里的堆表(Heap table) ,它是没有聚集索引定义的表,在它建立唯一和非唯一非聚集索引,来开始我们的分析.下列脚本会

堆空间的分配与释放

堆空间的分配和释放 #include <stdlib.h> malloc.calloc.realloc.free malloc void *malloc(size_t size); 功能:在堆中分配 size 字节的连续空间 参数:size_字节数 返回值:成功返回分配空间的首地址,失败返回 NULL free void free(void *ptr); 功能:释放由 malloc.calloc.realloc 分配的空间 参数:ptr_空间的首地址 返回值:无 注意: 1.每个空间只能释放一

想把多个域名绑定在一个空间上要怎么做

随着互联网的发展及自身网站规模的增大等原因,有时候你可能需要把多个域名绑定在一个空间上. 问题就来了,如果绑定域名的数量不多的是不会增加多少成本的,空间商为了节省运作成本,一般都会限制域名的绑定数量,一般只有3-5个左右.有的离谱点的甚至只给绑定两个域名,想要多绑定还有额外交钱.所以站长在选虚拟空间的时候需要注意一下域名可绑定数量是多好,最好可以多绑定几个域名而且可以实时申请实时生效.那么怎么绑定多个域名呢?而且有的方法根本就不支持子目录的,又该怎么办? 其实绑定多空间有多种方法的,而且不支持子