今天需要用到但是忘了, 所以来找了一下。 但是翻了七八篇文章, 发现内容几乎都一样。 刚好今天也看到一个段子:
A: 代码写得很烂怎么办?
B: 能跑吗? 能跑就行。
A: 能跑是指人能跑还是代码能跑?
C: 有一个能跑就行。
没错, 虽然也是一种方法, 但是很不好, 为什么? 因为重用性太差。
下面直接上代码, 其实二维三维都一个样。
二维
template <typename T2>
void print(T2* const array, const int X, const int Y)
{
for(int i = 0; i < X; ++i)
{
for(int j = 0; j < Y; ++j)
{
std::cout << *(array + i * Y + j) << " ";
}
std::cout << std::endl;
}
}
int a[x][y]; //x, y只是表明行和列数
//调用
print(&a[0][0], x, y); //传入数组声明时一致的x和y, 不然拿到的数据肯定不正确, 亲自踩坑
三维
template <typename T3>
void print(T3* const array, const int X, const int Y, const int Z)
{
for(int i = 0; i < X; ++i)
{
for(int j = 0; j < Y; ++j)
{
for(int k = 0; k < Z; ++k)
{
std::cout << *(array + i * Y * Z + j * Y + k) << " ";
}
std::cout << std::endl;
}
std::cout << std::endl;
}
}
int a[x][y][z];
//调用
print(&a[0][0][0], x, y, z); //再说一遍, 传入数组声明时一致的x, y和z
至于原理呢也有很多关于指针的文章, 不用我再说了。 那为什么要传入数组声明时一致的x和y, 懂了原理就会明白。