#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;那么会发生什么?数字函数中的符号。
我的理解是我们将指向第一个元素的指针传递给函数,但我不知道。
答案 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;
}
上述函数适用于不同对象类型和大小的数组。