码迷,mamicode.com
首页 > 编程语言 > 详细

创建动态二维数组

时间:2015-03-20 18:14:28      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

  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 }

 

创建动态二维数组

标签:

原文地址:http://www.cnblogs.com/YCS-personal/p/4353983.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!