在函数调用后计算多维数组元素

时间:2015-12-28 01:19:13

标签: c++ arrays multidimensional-array

我有一个简单的设置如下(你也可以在这里测试:http://cpp.sh/3yxqj):

main c: 6
func c: 4

输出结果为:

{{1}}

当然,6在哪里是正确的,4则不是。我想我明白为什么会这样。 array [] []退化(原谅这个术语)到函数内部的指针(*)[]。我不知道如何解决这个问题。我需要能够在将多维数组中的行传递给函数后对其进行计数。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

a通过引用获取数组。这样可以防止腐烂。

您还需要指定其他数组维度:

void a(const char (&c)[6][2])

您可以使用模板使其更具可重用性:

template <size_t N>
void a(const char (&c)[N][2])

甚至更一般:

template <typename T, size_t N>
void a(const T (&c)[N])

一旦你这样做,你可能会完全失去sizeof

template <typename T, size_t N>
size_t a(const T (&c)[N])
{
   return N;
}

然后:

std::cout << "main c: " << (sizeof(c)/sizeof(c[0])) << std::endl;
std::cout << "func c: " << a(c) << std::endl;

// g++ -std=c++11 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
// main c: 6
// func c: 6

live demo