#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.这解释了为什么它只打印数组的第一个值。
那么我做错了什么?
答案 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] << ' ';
}
}