C++ 查找作为参数传递给函数的数组中的元素数。

C++ 查找作为参数传递给函数的数组中的元素数。,c++,sizeof,turbo-c++,C++,Sizeof,Turbo C++,我试图创建一个函数来查找数组中的元素数。为此,我采用了以下代码: #include<iostream> #include<stdlib> int no_of_ele(A[]) //function to return size of array { return (sizeof(A)/sizeof(A[0]); } void main() { system("cls"); int arr[5] = {1,2,3,4,5}; co

我试图创建一个函数来查找数组中的元素数。为此,我采用了以下代码:

#include<iostream>
#include<stdlib>

int no_of_ele(A[])    //function to return size of array
{
    return (sizeof(A)/sizeof(A[0]);
}

void main()
{
    system("cls");
    int arr[5] = {1,2,3,4,5};

    cout<<"Number of elements in array are "<<no_of_ele(arr)<<endl;
    system("pause");
}
#包括
#包括
int no_of_ele(A[])//返回数组大小的函数
{
返回(sizeof(A)/sizeof(A[0]);
}
void main()
{
系统(“cls”);
int-arr[5]={1,2,3,4,5};

cout数组在传递到函数时衰减为指针

sizeof(int)/sizeof(int)... = 1
由于这个原因,参数在堆栈上被推送到函数。由函数声明声明的编译器只会发送数组的地址


将数组作为参数传递时

int func(int arr[])
正如:

int func(int *arr)


将数组作为函数参数,您无法使用
sizeof

来确定其大小,现在有更好的方法,但最接近的方法是:

#include<iostream>

template<std::size_t N>
int no_of_ele(int (&A)[N]){
    return sizeof(A)/sizeof(A[0]); // or just return N
}

int main(int argc, char* argv[]){

    int arr[5] = {1,2,3,4,5};

    std::cout<<"Number of elements in array are "<<no_of_ele(arr)<<std::endl;
    return 0;
}
#包括
模板
元素的整数编号(整数(&A)[N]){
返回sizeof(A)/sizeof(A[0]);//或者只返回N
}
int main(int argc,char*argv[]){
int-arr[5]={1,2,3,4,5};

Std::CouToNo:我使用Turbo C++ IDE,这是编译器的问题吗?但是如果我像后一个代码那样做,数组不会衰减,我得到正确的输出大小(即5)。为什么?数组在传递到函数中时会变成指针,第二个例子不这样做。这对我来说是正确的。
有一个数组;长度是已知的。但是
no\u of_ele()
只会得到一个指针。由于数组已退化为指针,所以您的输出是我所期望的。@Snigdh-(1)code::Blocks不是编译器,它是IDE。至少您可以设置另一个编译器来使用它,因此我建议进行切换。(2)因此,不可能为它生成函数。Right
sizeof(int)/sizeof(int)
-我很确定你的输入有误。
a
在OP中不是整数。@StoryTeller它只是一个说明为什么它是1的例子。将某个东西除以它本身。关于插图的问题是,它们前面应该有文本来否认这不是事实。即使这样,人们也不会阅读文本,只会选择插图最好是精确的,以免误导任何人。你可以在
no\u of\u ele
中“
返回N;
”@一二三, 说得好。我尽可能少地修改原始代码。因此,甚至不需要函数。@StoryTeller,ok@Snigdh不知道Turbo C++是否符合这个特性。@ Sigigdh,什么是错误?你仍然使用Turbo C++吗?编译器过时了,做了什么?ESN不遵循标准C++。
#include<iostream>

template<std::size_t N>
int no_of_ele(int (&A)[N]){
    return sizeof(A)/sizeof(A[0]); // or just return N
}

int main(int argc, char* argv[]){

    int arr[5] = {1,2,3,4,5};

    std::cout<<"Number of elements in array are "<<no_of_ele(arr)<<std::endl;
    return 0;
}