C/ c++中数组的参数传递和作用域

Parameter passing and scope of array in C/C++

本文关键字:参数传递 作用域 数组 c++      更新时间:2023-10-16

这个问题一直困扰着我。我有一个数组,在它的声明范围内,我可以使用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;
}

代码输出为5 2。我如何将数组传递给函数,以便我可以仅使用sizeof操作符来确定其大小,并且不必将额外的大小作为参数传递给该函数?

template<size_t N>
int count(int (&a)[N])
{
    return N;
}

你不能那样做。没有办法传递一个数组,使其携带其大小信息。你必须自己做。您必须将计数作为附加参数传递。