国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++二維數組講解、二維數組的聲明和初始化

2020-05-23 14:27:24
字體:
來源:轉載
供稿:網友
我們知道,一維空間是一條線,數學中用一條數軸來表達;二維空間是一個平面,數學中用平面坐標系來表達。那么二維數組又是什么樣的呢?

線與面

我們用一個下標來描述一維數組中的某個元素,就好像在用數描述一條線上的點。而所有的數據都是存儲在一條線上。如果我們采用兩個下標,就能形成一個平面,猶如一張表格,有行有列,所有的數據就能夠存放到表格里。
C++二維數組講解、二維數組的聲明和初始化

我們把二維數組的兩個下標分別稱為行下標和列下標,在前面的是行下標,在后面的是列下標。

那么什么時候要用二維數組呢?一般有兩種情況,一種是描述一個二維的事物。比如用1表示墻,用0表示通路,我們可以用二維數組來描述一個迷宮地圖;用1表示有通路,0表示沒有通路,我們可以用二維數組來描述幾個城市之間的交通情況。還有一種是描述多個具有多項屬性的事物。比如有多個學生,每個學生有語文、數學和英語三門成績,我們就可以用二維數組來描述。

對于第二種情況,我們要注意各項屬性應該是同一種數據類型,比如三種學科的成績都是整數。如果出現了姓名(字符串屬性),就不能將他們組合到一個二維數組里去。所以不要企圖將不同數據類型的屬性整合到一個二維數組中去。

二維數組的聲明和初始化

二維數組的聲明和一維數組是類似的,不同之處只是多了一個下標:
    數據類型數組名[行數][列數];

要注意,二維數組的下標也都是從0開始的。

二維數組的初始化分為兩種,一種是順序初始化,一種是按行初始化,我們來看一段程序,就能夠對它們有所了解了:(程序7.4.1)
#include "iostream.h"
#include "iomanip.h"
int main()
{
   int array1[3][2]={4,2,5,6};//順序初始化
   int array2[3][2]={{4,2},{5},{6}};//按行初始化
   cout <<"array1" <<endl;
   for (int i=0;i<3;i++)//輸出數組array1
   {
      for (int j=0;j<2;j++)
     {
         cout <<setw(2) <<array1[i][j];
      }
      cout <<endl;
   }
   cout <<"array2" <<endl;
   for (int k=0;k<3;k++)//輸出數組array2
   {
      for (int l=0;l<2;l++)
      {
         cout <<setw(2) <<array2[k][l];
      }
      cout <<endl;
   }
   return 0;
}

運行結果:
array1
4 2
5 6
13 4
array2
4 2
5 8
6 8

我們可以看出,所謂按順序初始化就是先從左向右再由上而下地初始化,即第一行所有元素都初始化好以后再對第二行初始化。而按行初始化則是用一對大括號來表示每一行,跳過前一行沒有初始化的元素,在行內從左向右地進行初始化。對于沒有初始化的元素,則都是一個不確定的值。

省略第一維的大小

我們在第一節學到,一維數組的大小可以省略。可是二維數組的元素個數是行數和列數的乘積,如果我們只告訴電腦元素個數,電腦無法知道究竟這個數組是幾行幾列。所以,C++規定,在聲明和初始化一個二維數組時,只有第一維(行數)可以省略。比如:
C++二維數組講解、二維數組的聲明和初始化    int array[][3]={1,2,3,4,5,6};
相當于:
    int array[2][3]={1,2,3,4,5,6};

二維數組在內存中的存儲情況

先前已經說明,內存是依靠地址來確定內存中的唯一一個存儲單元的,即只有一個參數。所以在內存中,所有的數據都是像一維數組那樣順序存儲的。那么具有兩個下標的二維數組是怎樣存放到內存中的呢?

在內存中,先將二維數組的第一行按順序存儲,接著就是第二行的數據,然后是第三行的數據……右圖(圖7.4)所示的就是一個二維數組在內存中的存儲情況。

向函數傳遞二維數組

我們知道,數組作為參數傳遞給函數的是數組首元素的地址。對于二維數組來說亦是如此。不過有兩個問題,一個是我們必須讓函數知道行數和列數,這就像我們要讓函數知道一維數組的大小一樣,防止發生越界訪問。另一個就是我們必須讓電腦知道這個二維數組是怎樣的一個表格,即必須告知數組的列數。這和只能省略二維數組的行數道理是一樣的。下面我們就來看一個向函數傳遞二維數組的程序:
#include "iostream.h"
#include "iomanip.h"
void disp(int a[][2],int r,int c);//告知數組的列數
int main()
{
   int array[3][2]={4,2,5,6,3,1};
   cout <<"array" <<endl;
   disp(array,3,2);
   return 0;
}
void disp(int a[][2],int r,int c)
{
   for (int i=0;i<r;i++)
   {
      for (int j=0;j<c;j++)
      {
         cout <<setw(2) <<a[i][j];
      }
      cout <<endl;
   }
}

運行結果:
array
4 2
5 6
3 1

二維數組轉化成一維數組

有些時候,我們覺得用二維數組來描述一樣事物很方便。比如我們用二維數組來畫一個迷宮地圖,行下標和列下標就如同直角坐標系一樣。可是在某些情況下,不能使用二維數組,或者難以制造一個二維數組。二維數組在內存中的存儲情況和一維數組是相同的,所以我們只好用一個一維數組來代替它了。
C++二維數組講解、二維數組的聲明和初始化

于是,我們不難總結出一個結果,一個二維數組元素a[x][y]在一維數組b中,是:
    a[x][y]=b[x*列數+y]
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 红桥区| 新竹县| 边坝县| 榆社县| 神木县| 广东省| 鄂尔多斯市| 渝北区| 金堂县| 崇文区| 罗山县| 大新县| 雅江县| 霍城县| 澜沧| 临泉县| 连州市| 耒阳市| 靖宇县| 长泰县| 时尚| 油尖旺区| 海淀区| 射阳县| 黄龙县| 乌拉特中旗| 阳原县| 绵竹市| 泾川县| 大埔区| 萨嘎县| 宜春市| 依安县| 胶南市| 枣阳市| 西宁市| 界首市| 庆元县| 济源市| 柳州市| 舟曲县|