0

可能重复:
在 C++ 中将数组作为参数传递
给 C 编程语言中的数组大小?

您能否解释以下代码的输出:

#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()中的代码看起来都与我相似,以产生相同的输出,但事实并非如此,您能解释一下原因吗?

4

2 回答 2

4
void foo(int array[]) 

在 C 或 C++ 中,您不能按值传递数组,因此上述声明被解释为:

void foo(int * array)

考虑通过引用传递数组:

template <size_t N>
void foo( int(&array)[N] )
{   
    cout << N << endl;
}
于 2012-07-13T08:15:49.543 回答
3

您没有将数组传递给函数,而是将指针传递给数组。

这意味着,在 functionfoo()中,结果sizeof(array)是指向 char 数组的指针的大小,而不是数组本身的大小,因此该函数实际上是这样做的:

cout << sizeof(int *) / sizeof(array[0]);

在这种情况下,大小int *为 8,int 大小为 4,因此您从函数中得到 2 的输出。

于 2012-07-13T08:15:55.257 回答