#include <iostream>
using namespace std;
using array_alias = int[4]; //typedef int array_def[4];
typedef int (*array_def)[4]; //using array_alias = int (*)[4]
int main()
{
constexpr size_t rowCnt = 3, colCnt = 4;
int ia[rowCnt][colCnt] = {};
//1.原始方法
for(int i = 0; i !=rowCnt; i++)
for(int j = 0; j != colCnt; j++)
cout <<ia[i][j];
cout << endl;
//2.size_t是数组的长度类型,因为不同编译器可能不一样,为了保证足够大,定义了该类型,具体可能是unsigned short , int, long .long long
for(size_t i = 0; i !=rowCnt; i++)
for(size_t j = 0; j != colCnt; j++)
cout <<ia[i][j];
cout << endl;
//3.最原始的指针理解
for(int (*p)[4] = &ia[0]; p != &ia[0] +3; p++)//取a[0]元素首地址
for(int* q = &(*p)[0]; q != &(*p)[0] + 4; q++)//p是指向a[0]收地址,*p就是a[0],现在定义q指向a[0]数组首元素a[0][0]
cout <<*q;
cout << endl;
//3.懒得解释&ia[0]=>a
for(int (*p)[4] = ia; p != ia +3; p++)
for(int* q = *p; q != *p + 4; q++)
cout <<*q;
cout << endl;
for(array_def p = ia; p != ia +3; p++)
for(int* q = *p; q != *p + 4; q++)
cout <<*q;
cout << endl;
for(array_alias* p = ia; p != ia +3; p++)
for(int* q = *p; q != *p + 4; q++)
cout <<*q;
cout << endl;
for(auto p = ia; p != ia +3; p++)
for(auto q = *p; q != *p + 4; q++)
cout <<*q;
cout << endl;
//6.
for(int (*p)[4] = begin(ia); p != end(ia); p++)
for(int* q = begin(*p); q != end(*p); q++)
cout <<*q;
cout << endl;
for(auto p = begin(ia); p != end(ia); p++)
for(auto q = begin(*p); q != end(*p); q++)
cout <<*q;
cout << endl;
//
for(decltype(ia[0]) row : ia)
for(auto col : row)
cout << col;
cout << endl;
for(int (&row)[4] : ia)
for(auto col : row)
cout << col;
cout << endl;
for(array_alias& row : ia)
for(auto col : row)
cout << col;
cout << endl;
for(auto& row : ia)
for(auto col : row)
cout << col;
cout << endl;
//不装了,摊派了,直接读内存内容吧
for(auto p = begin(ia[0]); p != end(ia[2]); p++)
cout <<*p;
cout << endl;
for(const int* p = &ia[0][0]; p != &ia[2][4]; p++)
cout << *p;
cout << endl;
for(const int* p = reinterpret_cast<int*>(ia); p != reinterpret_cast<int*>(ia)+sizeof(ia)/sizeof(**ia); p++)
cout << *p;
cout << endl;
return 0;
}
C++11:数组的输出
于 2022-06-27 20:38:04 首次发布