创建动态二维数组

  1 //========================================================
  2 //创建动态二维数组a [M] [N];
  3 //思路一:二维数组的抽象理解;
  4 //思路二:二维数组在内存中实际排列;
  5 //========================================================
  6 #include <stdio.h>
  7 #include <stdlib.h>
  8 #include <windows.h>
  9
 10 //宏MIND用于选择思路;该宏定义时编译思路一,未定义时编译思路二;
 11 #define MIND 1
 12
 13 int main()
 14 {
 15     //m为二维数组行数,n为列数;
 16     int m,n,i,j;
 17
 18     printf ("请输入二维数组的行数:");
 19     scanf ("%d",&m);
 20     printf ("请输入二维数组的列数:");
 21     scanf ("%d",&n);
 22     system ("cls");
 23
 24 #ifndef MIND
 25     //========================================================
 26     //思路二;
 27     //========================================================
 28     printf ("思路二\n");
 29
 30     int *p;
 31     p=(int *) calloc (m*n,sizeof(int));
 32
 33     //输入二维数组;
 34     printf ("请输入二维数组各元素:\n");
 35     for (i=0; i < m; ++i)
 36     {
 37         for (j=0; j < n; ++j)
 38         {
 39             scanf ("%d",(p+i*n+j));
 40         }
 41     }
 42
 43     //输出二维数组;
 44     printf ("\n二维数组(行:%d  列:%d):\n");
 45     for (i=0; i < m; ++i)
 46     {
 47         for (j=0; j < n; ++j)
 48         {
 49             printf ("%6d",*(p+i*n+j));
 50         }
 51         printf ("\n");
 52     }
 53
 54     free (p);
 55
 56 #else
 57     //========================================================
 58     //思路一;
 59     //========================================================
 60     printf ("思路一\n");
 61
 62     int **p;
 63
 64     //申请一维动态指针数组;
 65     p=(int **) calloc (m,sizeof (int *));
 66
 67     //申请每行的一维动态数组;
 68     for (i=0; i < m; ++i)
 69     {
 70         *(p+i)=(int *) calloc (n,sizeof (int));
 71     }
 72
 73     //输入二维数组;
 74     printf ("请输入二维数组各元素:\n");
 75     for (i=0; i < m; ++i)
 76     {
 77         for (j=0; j < n; ++j)
 78         {
 79             scanf ("%d",(*(p+i)+j));
 80         }
 81     }
 82     printf ("\n");
 83
 84     //输出二维数组;
 85     for (i=0; i < m; ++i)
 86     {
 87         for (j=0; j < n; ++j)
 88         {
 89             printf ("%6d",*(p [i]+j));   //此处与行指针用法一样;
 90         }
 91         printf ("\n");
 92     }
 93
 94     //由里向外释放内存;
 95     for (i=0; i < m; ++i)
 96     {
 97         free (*(p+i));
 98     }
 99     free (p);
100
101 #endif
102
103     system ("pause>nul");
104     return 0;
105 }
时间: 2024-08-27 22:48:17

创建动态二维数组的相关文章

vector动态二维数组(容器的容器)占用内存分析

之前在这里写过一篇"C++中的动态二维数组".在C++中没有动态二维(多维)数组.但是根据原理我们可以自己创建. 在看过STL的vector源代码后"<STL源码剖析>---stl_vector.h阅读笔记"后,想到可以用容器的容器来做二维数组. 创建一个2x4的二维数组.想到的办法是:先创建一个容器的容器,外层大小的2(2行),然后里面容器小大为4(4列). int row=2,col=4; vector<vector<int> &g

C语言批量数据到动态二维数组

上一篇文章将文件读取放到静态创建的二维数组中,可是结合网络上感觉到今天的DT时代,这样批量大量读取一个上百行的数据,分配的内存是否可能由于大量的数据而产生溢出呢,近期一直研究里malloc函数.通过它来动态建立所需的二维数组.因此.通过文件操作和动态创建二维数组结合起来,将大量的数据动态的放入矩阵中,不知道这种思想是否正确,下午把程序执行出来了.将程序贴上来.欢迎大家一起探讨:对于有规律的大数据txt文档怎样高效而准确的读入数组或矩阵中呢???指教!.谢谢 程序: #include<stdio.

以杨辉三角为例,从内存角度简单分析C语言中的动态二维数组

学C语言,一定绕不过指针这一大难关,而指针最让人头疼的就是各种指向关系,一阶的指针还比较容易掌握,但一旦阶数一高,就很容易理不清楚其中的指向关系,现在我将通过杨辉三角为例,我会用四种方法从内存的角度简单分析动态二维数组,若有不足或错误之处,还请指出! 在讲这之前,以一维数组为例,先重新认识一下数组: int array[5] = {1, 2, 3, 4, 5}; 首先数组名称是该数组的首地址常量,即数组名称就是指针,就有&array[0] == array! 那么我们可以推出*array ==

c++动态二维数组(原地址:http://blog.sina.com.cn/s/blog_4e7ae8ca0100zqq6.html)

C++中用new动态创建二维数组的格式一般是这样: TYPE (*p)[N] = new TYPE [][N]; 其中,TYPE是某种类型,N是二维数组的列数.采用这种格式,列数必须指出,而行数无需指定.在这里,p的类型是TYPE*[N],即是指向一个有N列元素数组的指针. 还有一种方法,可以不指定数组的列数: int **p;p = new int*[10];    //注意,int*[10]表示一个有10个元素的指针数组for (int i = 0; i != 10; ++i){    p[

C++中创建动态2维数组

1 #include<iostream> 2 #include<iomanip> 3 using namespace std; 4 5 template<class Type> 6 void Make2DArray(Type **&x,int rows,int cols) 7 { 8 // 创建一个行指针 9 x=new Type *[rows]; 10 for(int i=0;i<rows;i++) 11 { 12 x[i]=new Type [cols

动态二维数组一个很奇怪的问题,内存泄露还是???

最近遇到的问题,具体如下: #include <iostream> using namespace std; typedef void(*P[10])(bool& flag); #define N 10000 #define M 10000 template<class T> void fun(bool& flag) { int i; static T** p=nullptr; switch (flag) { case false: p = (T**)new T*[

c++ 动态创建二维数组

为了做一个东西需要用到动态创建二维数组,特此记录. #include <iostream> #include "time.h" using namespace std; int main() { srand((unsigned)time(NULL)); int x_num; int y_num; cout<<"please input x_num:"; cin>>x_num; cout<<"please in

&lt;细节&gt;动态创建二维数组

今天在做一个关于数组相似度的题目,需要动态创建二维数组,刚开始想用常规的int a[ ][ ]建立,但很快就发现行不通,这种常规数组必须在编译前指定数组的维数,而这个题目在的维数必须在运行中计算得出,于是想到采用new来建立动态二维数组,这个方法行得通,但是很麻烦,也不太利于理解,后面决定采用vector< vector< int > >方法来创建,简单了不少,下面对两种方法都进行一下总结. 1.使用vector创建二维数组 #include <iostream> #i

js 基于可视区域 创建展示区域对应的经纬度二维数组

本篇文章主要是分享下基于地图区域创建经纬度二维数组,需要的朋友可以过来参考下 接上个文章, 基于 地图区域,算出这个展示区域对应的点. 经纬度的变化关系:  XY页面展示上, 从左到右维度是增加 如: 106  -> 107 , 从上到下经度是减小  如:30 ->29 创建的时候需要确定从哪开始, 附上代码,如下: function getSizePointsData (latMin,latMax,lngMin,lngMax,lngStep,latStep){ // 区域的最小经度,最大经度