程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 創建動態二維數組,動態二維數組

創建動態二維數組,動態二維數組

編輯:關於C語言

創建動態二維數組,動態二維數組


  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 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved