-1
#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。这解释了为什么它只打印数组的第一个值。

那么我做错了什么?

4

1 回答 1

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] << ' ';
  }
}
于 2013-06-07T12:54:48.597 回答