1.多維陣列其實就是陣列中巢狀陣列,陣列的元素還是陣列,這樣巢狀起來就沒有限制,
一般稱二維陣列的第一維叫做行,第二位叫做列,其實學
int a[3]
[4];
int a[3]
[4][
2];int a[2]
[2][
2][2
];俄羅斯套娃,可以巢狀很多層,
2.使用初始化列表對多維陣列進行初始化,如果初始化列表不全則後面的元素使用預設值初始化
//呼叫預設初始化
int a[3]
[4]=
;//統一初始化為1
int a[3]
[4]=
;//為每一行初始化
int a[3]
[4]=
,,}//順序初始化
int a[3]
[4]=
//按照維度進行初始化
int a[3]
[4]=
,,}//初始化列表的長度小於陣列中元素的個數
int a[3]
[4]=
;
乙個多維資料可以利用列表初始化來順序初始化,這表明在記憶體中,c++是按行順序儲存陣列中元素的。
3.和一維陣列一樣,使用下標運算子可以訪問陣列中的元素,如果下標運算子的個數等於陣列的維度,則返回定義的型別元素,如果小於陣列的維度,則返回的是陣列。
4.基於範圍的for同樣適用於多維陣列,但是使用auto遍歷的時候要使用引用型別,因為不使用引用型別的話,會被auto推斷為指標型別,從而導致範圍for遍歷不了
for
(const
auto
&item:a)
使用多維陣列,除了在最內層可以不加引用,其餘的層都要加引用
5.多維陣列和一維陣列一樣,編譯器會將其轉化為指標,多維陣列的指標指向其首元素,其實也沒有什麼特別的,只是首元素為陣列時,定義的指標型別稍稍有點複雜
a的指標型別為
int(
*p)[4]
=a;
p是一根指標,這個指標指向乙個陣列,這個陣列是大小為4的整型陣列
6.使用型別別名可以使得多維陣列的指標稍微沒有那麼複雜
複習
using int_array =
int[4]
;typedef
int[
4] int_array;
3.43
int ia[3]
[4]=
;首先是3個錯誤的例子,為了加深印象寫出來了。
//這種是錯誤的,因為陣列不允許拷貝和賦值
for(
int item[4]
:ia)
//這也是錯誤的,這似乎和編譯器有關,
因為int
(*item)[4
]=ia;
//是合法的,但是在遍歷的時,顯示ia遍歷的值的型別為int*型別,所以二者的型別不匹配,所以就導致了下面這種寫法是錯誤的。
for(
int(
*item)[4
]:ia)
//這一種編譯正確,因為大小為4的整型陣列在編譯的過程中會被替換為int*型別,但是int*型別是無法進行範圍for遍歷的
for(
int* item :ia)
1.基於返回for的遍歷
//返回的是大小為4的整數陣列,定義大小為4的整數陣列引用
for(
int(
&item)[4
]:ia)
}2.基於下標運算子
for(
int i =
0; i <3;
++i)
}3.基於指標
//多維陣列的名字在編譯時也會變成指向首元素的指標
//在這裡ia內部的元素是大小為4的陣列,所以指標型別為int (*item)[4]
for(
int(
*item)[4
]=begin
(ia)
; item !=
end(ia)
;++item)
}
3.44
using int_array =
int[4]
;for
(int_array* item =
begin
(ia)
; item !=
end(ia)
;++item)
for(
int* item1 =
begin
(*item)
; item1 !=
end(
*item)
;++item1)
for(
int i =
0; i <
4;i++
)}
3.45
for
(const
auto
& item : ia)
}
C primer學習筆記 3 6多維陣列
嚴格來說,c 語言中沒有多維陣列,通常所說的多維陣列其實是陣列的陣列 盡量不要當成一維陣列理解,雖然可能儲存結構是如此實現的 多維陣列的宣告語句可以按照由內到外的閱讀順序來理解其實際含義。對於二維陣列來說,常把第乙個維度稱為行,第二個維度稱為列。多維陣列的初始化 允許使用花括號括起來的一組值初始化多...
C primer習題 第3章
習題 2.11 編寫程式,要求使用者輸入兩個數 底數 base 和指數 exponent 輸出底數的指數次方的結果。include include include using namespace std intmain for int i 1 i exp i result base cout 的 次...
C primer習題 第3章
習題 2.11 編寫程式,要求使用者輸入兩個數 底數 base 和指數 exponent 輸出底數的指數次方的結果。include include include using namespace std int main for int i 1 i exp i result base cout 的 ...