C++传递二维/三维数组给函数

今天需要用到但是忘了, 所以来找了一下。 但是翻了七八篇文章, 发现内容几乎都一样。 刚好今天也看到一个段子:

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, 懂了原理就会明白。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值