C++ C/C中的参数传递和数组范围++

C++ C/C中的参数传递和数组范围++,c++,arrays,function,parameters,scope,C++,Arrays,Function,Parameters,Scope,这个问题一直困扰着我。我有一个数组,在它的声明范围内,我可以使用sizeof运算符来确定其中的元素数,但当我将它传递给函数时,它将解释为指向数组开头的指针,而sizeof运算符只给出这个指针变量的大小。就像下面的例子一样 #include<iostream> int count(int a[]){ return (sizeof(a)/sizeof(int)); } int main(){ int a[]={1,2,3,4,5}; std::cout <&

这个问题一直困扰着我。我有一个数组,在它的声明范围内,我可以使用sizeof运算符来确定其中的元素数,但当我将它传递给函数时,它将解释为指向数组开头的指针,而sizeof运算符只给出这个指针变量的大小。就像下面的例子一样

#include<iostream>
int count(int a[]){
    return (sizeof(a)/sizeof(int));
}
int main(){
    int a[]={1,2,3,4,5};
    std::cout << sizeof(a)/sizeof(int) << " " << count(a) << std::endl;
    return 0;
}

代码的输出是52。如何将数组传递给函数,以便只使用sizeof运算符确定其大小,而不必将额外的大小作为参数传递给此函数?

您不能这样做。无法通过传递数组使其携带大小信息。你必须自己做。您必须将计数作为附加参数传递。

thanx Benjamin。你能告诉我如何在c中做同样的事情吗?@sidharthsharma:不,我不能。@sidharth sharma:不能像你在c中描述的那样做。数组作为函数参数传递时会衰减到指针,在许多其他情况下也会如此。所以你需要明确地传递这个大小。@ SIDHARTHONE,你问了一个关于C++的问题,你想在C?@ SIDHARTHSARMA中找到答案。这就是为什么写C/C++和混淆两种语言是个坏主意。考虑STD::数组你需要一个C++ 11编译器。如果你没有C++ 11,你可以使用Booo::这与本杰明的说法不同answer@awoodland但是,这是作弊,不是吗?仅当显式标注的数组声明在范围内时,它才起作用。如果我有int myfunction int[]a,它将不起作用。
template<size_t N>
int count(int (&a)[N])
{
    return N;
}