一:定義
int arr[3];
int brr[3][4];
對比一位陣列,二維陣列具有行和列兩個引數,在定義上,與一維陣列相似
資料型別 陣列名[行][列];
二:初始化
同樣,對於一維陣列的初始化,如下所示:
int arr[3] = ;
int arr[3] = ;//其餘預設為0
那麼,二維陣列呢?
二維陣列的初始化採用行優先的原則並且,中括號裡邊只能省略行的值,不能省略列的值。
三:二維陣列的列印
列印二位陣列,兩層for迴圈,遍歷行和列,然後進行列印
直接在主函式中列印:
利用函式呼叫,列印:
在利用函式呼叫列印二維陣列時,一般我們的引數列表為
void show(int crr[4],int row,int col)
在這裡要注意,二維陣列的陣列名不是乙個二級指標,因此,不可以將引數列寫成
void show(int **crr,int row,int col)//error
那麼在呼叫函式中,一維陣列的形參列表可以寫成(int *arr)指標型別,
那麼二位陣列呢,接下來我們對比分析一下兩者的異同:
一維陣列,它的定義為:int arr[4];並且我們可以確定的是:
先來看一維陣列,一維陣列中的陣列名
arr的資料型別為int *
arr+1為int *
arr[0]為int
在二維陣列中,int brr[3][4];它的陣列名以及以下的資料型別分別為:
brr: int(*p)[4]
brr+1: int(*p)[4]
brr[0]: int *
brr[0]+1: int *
brr[0][0]: int
也就是說,我們可以將乙個二維陣列看成是乙個一維陣列,一行為乙個單元格,遵循行優先的原則。
即brr[0][4]和arr[4]相比較,arr == brr[0],同為一維陣列名。
在此,我們區別以下陣列指標和指標陣列的含義:
int (*p)[4];//陣列指標:即指向陣列的指標
int *p[4];//指標陣列:即儲存指標的陣列
因此,利用呼叫函式時,我們可以將形參列表寫成如下:
對了,在說乙個關於二維陣列越界的問題,由於我們可以將乙個二維陣列看成乙個一維陣列,當二維陣列月結某一行時,自動跳轉到下一行的起始位置。如下例所示,越界的位置和下一行的起始位置值一致。
最後附上判斷複雜資料型別的方法:
(一):看符號的優先順序
(二):陣列 關注陣列的格仔數和資料型別
*指標 關注指標的指向內容
()函式 關注函式的引數列表和返回值
二維陣列詳解
問題 cannot convert from double 10 10 to double 例如 double arry 5 10 double pp pp arry 直接的賦值會提示錯誤 cannot convert from double 10 10 to double 解決方法 double ...
Objective C 二維陣列詳解
在實際的專案開發中,二維陣列也是常常用到的資料結構。oc中的二維陣列也是通過一維陣列來建立的,今天我們來詳解一下如何在oc中使用二維陣列。使用nsarray初始化二維陣列 使用nsarray初始化的一維陣列和二維陣列都是不可變陣列。import int main int argc,const cha...
二維陣列的詳解
二維陣列在概念上是二維的,有行和列,但在記憶體中所有的陣列元素都是連續排列的,它們之間沒有 縫隙 要用陣列指標來操作二維陣列。int p 4 a p每移動一次就是移動了乙個一維陣列。指標陣列 int p a 4 int p 4 以下面的二維陣列 a 為例 int a 3 4 從概念上理解,a 的分布...