需要帮助来理解下面的c ++代码

时间:2017-09-18 04:57:13

标签: c++

#include<iostream>
using namespace std;
int number(int (&a)[10])
{
    int n= sizeof(a)/sizeof(a[0]);
    return n;
}
int main()
{
    int n;
    cout << " Enter the number of elements ";
    cin >> n;
    int a[10];
    cout << "Enter array elements : ";
    for(int i=0;i<n;i++)
        cin>>a[i];
    cout<<" The number of elements according to main is "<< sizeof(a)/sizeof(a[0])<<endl;
    cout<<"  The number of elements in the function number is " << number(a);
}

在上面的主要功能代码&#34;数字(a)&#34;这里我们究竟通过了什么以及该方法采取了什么。代码如何在函数中工作。如果我们不使用&#34;&amp;&#34;那么会发生什么?数字函数中的符号。

我的理解是我们将指向第一个元素的指针传递给函数,但我不知道。

1 个答案:

答案 0 :(得分:0)

当您致电number(a)时,您正在传递对10 int s数组的引用。

让我们采取更简单的功能。

void foo(int& ref) { }

您可以使用

进行调用
int i = 20;
foo(i);

这里,传递给函数的变量i的引用。您可以通过i访问foo中变量ref的值。您在ref中对foo所做的任何更改都将在调用函数中显示。

类似地,您的函数引用一个类型为“10 int s的数组”的变量。函数对引用的唯一作用是计算数组的元素数。

它使用了一些冗余逻辑。您可以将该功能简化为:

int number(int (&a)[10])
{
    return 10;
}

该功能受限于它可以使用的功能。如果您有一个类型为float的数组,或者如果您有一个包含20个元素的数组,则它不会起作用。您可以创建模板函数以使其更通用。

template <typename T, size_t N>
size_t number(T (&arr)[N])
{
   return N;
}

上述函数适用于不同对象类型和大小的数组。