多维数组和指针以及遍历

多维数组和指针以及遍历:
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;

猜你喜欢

转载自www.cnblogs.com/suchang/p/10575218.html