查找函数内部数组的大小

时间:2013-06-07 12:52:22

标签: c++ arrays

#include <iostream>
using namespace std;
void print(int a[])
{
    int size = sizeof(a)/sizeof(int);
    for ( int i = 0; i < size; i++){
        cout << a[i] << " ";
    }


}
int main()
{
    int a[] = {3, 4, 5, 0, 0, 1};
    print(a);
}

这是一个简单的功能,我认为我的目标是显而易见的。一切似乎都是为了我,但功能只打印数组的第一个值。我尝试返回大小并检查它的值,它是1.这解释了为什么它只打印数组的第一个值。

那么我做错了什么?

1 个答案:

答案 0 :(得分:0)

您无法在C ++中按值传递数组,它会衰减到指向其第一个元素的指针。以下签名在语义上是100%等效的:

void print(int a[]);
void print(int *a);

您可以将该功能转换为功能模板并通过引用接受该数组:

template <size_t N>
void print(int (&a)[N])
{
  for (size_t i = 0; i < N; ++i) {
    cout << a[i] << ' ';
  }
}