可能重复:
Passing an array as an argument in C++
Sizeof an array in the C programming language?
您能解释一下以下代码的输出:
#include<iostream>
using namespace std;
void foo(int array[])
{
int size = sizeof(array) / sizeof(array[0]);
cout<<size<<endl;
}
int main()
{
int array[] = {1,2,3};
int size = sizeof(array) / sizeof(array[0]);
cout<<size<<endl;
foo(array);
return 0;
}
相应的输出是:
3
2
foo()内部和 main()内部的代码看起来与我类似,以便产生相同的输出,但它没有,请你解释一下为什么呢?
答案 0 :(得分:4)
void foo(int array[])
在C或C ++中,您无法按值传递数组,因此上述声明被解释为:
void foo(int * array)
考虑通过引用传递数组:
template <size_t N>
void foo( int(&array)[N] )
{
cout << N << endl;
}
答案 1 :(得分:3)
您没有将数组传递给函数,而是将指针传递给数组。
这意味着,在函数foo()
中,sizeof(array)
的结果是指向char数组的指针的大小,不是数组本身的大小,所以这个功能实际上是这样做的:
cout << sizeof(int *) / sizeof(array[0]);
在这种情况下,int *
的大小为8,int的大小为4,因此您从函数中获得2的输出。