1. 程式人生 > >多維數組和指針以及遍歷

多維數組和指針以及遍歷

否則 清晰 ++ 下標 const 範圍for 指向 如果 既然

多維數組和指針以及遍歷:
1、範圍for語句遍歷多維數組:
eg:
int int_arr[3][4]={0};//全部是0
for(const auto &row:int_arr)
for(auto &col:row){
cout<<col<<endl;
}
這裏註意:除了嘴內層循環,所有的外層循環都要使用引用,否則編譯器會初始化的時候會把自動把這些元素轉換成指向該數組內首元素的地址,即就是一個int*,const 表示不可以修改,
註意:今後在編寫程序的過程找那個,我們盡量用範圍for語句處理多維數組,如果使用其他一般的for語句,我們最好使用!=來作為判斷條件,不要使用<=作為判斷條件。

2、指針和多維數組:
eg:
int int_arr2[3][4]={0};//多維數組
int *p[5];//p是一個含有5個整型指針的數組
int (*p)[5];//p是一個指向含有5個整型數的指針
用指針遍歷:
for(auto p=int_arr2;p!=int_arr2+3;p++)//p指向int_arr2的第一個內層數組,我們用auto,因此不用關心p是什麽類型,交給編譯器去搞清楚
for(auto q=*p;q!=*p+4,q++)//*p表示第一個內層數組的數組名(或者是指向第一個內層數組的第一個元素的指針)
{
........執行操作
cout<<*q<<endl;//*q表示當前數組的元素值
}
既然*p表示一個數組名(可以這樣通俗的理解),因此我們可以用begin()he end()來進行初始化和作為判斷條件
上面還可以這樣寫(更清晰,更容易理解):
for(auto p=begin(int_arr2),p!=end(int_arr2);p++)
for(auto q=begin(p);q!=end(p);q++)
{
........執行操作
cout<<*q<<endl;//*q表示當前叠代器所指向的元素值
}
小小的練習:輸出數組的內容
int int_arr3[3][4]={{1,2,2,3},{8,6,9,5},{6,12,56,95},{58,5,56,5}};
1、使用範圍for語句:
for(const auto &row:int_arr3)//這裏的引用是必須的,否則row是一個int*
for(auto col:row)
cout<<col<<endl;
2、使用下標運算符:
for(int i=0;i!=3;i++)
for(int j=0;j!=4;j++)
cout<<int_arr3[i][j]
3、使用指針:
for(auto p=int_arr3;p!=int_arr3+3;p++)
for(auto q=*p;q!=*p+4;q++)
cout<<*q<<endl;
4、使用叠代器:
for(auto p=begin(int_arr3);p!=end(int_arr3);p++)
for(auto q=begin(p);q!=end(p);q++)
cout<<*q<<endl;

多維數組和指針以及遍歷