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

时间:2017-08-06 06:05:17

标签: 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};

    cout<<"Number of elements in array are "<<no_of_ele(arr)<<endl;
    system("pause");
}

在这种方法中我输出如下:
enter image description here

然后,我这样做了:

cout<<"Size of array is "<<sizeof(arr)<<endl;
cout<<"Size of data type is "<<sizeof(arr[0]);

现在我得到绝对正确的大小输出如下:

enter image description here

为什么?

2 个答案:

答案 0 :(得分:6)

现在有更好的方法,但最接近的是:

#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;
}

对1998年的问候。问题是,Turbo C ++是否支持模板?

请点击此处了解详情:Is it possible to overload a function that can tell a fixed array from a pointer?

答案 1 :(得分:2)

当传递给你的函数时,数组衰减为指针。

sizeof(int)/sizeof(int)... = 1

原因是,将参数推送到堆栈上的函数。函数声明声明的编译器只会发送数组的地址。

将数组作为参数传递时

int func(int arr[])

就像:

int func(int *arr)

将数组作为函数参数使用sizeof无法确定其大小。