我想通过引用传递函数中的数组值
我第一次尝试变量(效果很好):
#include <iostream>
using namespace std;
int input(int &);
int main()
{
int a;
input(a);
cout << "the value : " << a << endl;
system("pause");
return 0;
}
int input(int &a)
{
cin >> a;
}
但是当我将a
更改为 a[]
时,如下面的代码所示,
不起作用
#include <iostream.h>
using namespace std;
int input(int &[]);
int main()
{
int a[2], i;
input(a);
for(i=0;i<=2;i++)
{
cout << a << endl;
}
system("pause");
return 0;
}
int input(int &a[])
{
int i;
for(i=0;i<=2;i++)
{
cin >> a[i];
}
}
答案 0 :(得分:2)
此记录
int &[]
表示在C ++中禁止的引用数组。
按以下方式声明函数
void input(int(&amp;)[2]);
此外,您使用的是无效的indeces范围。有效范围是[0,1]。所以函数看起来像
void input( int ( &a )[2] );
{
for ( size_t i = 0; i < 2; i++ ) std::cin >> a[i];
}
您还可以通过以下方式定义功能
void input( int a[], size_t n );
{
for ( size_t i = 0; i < n; i++ ) std::cin >> a[i];
}
并将其命名为
input( a, 2 );
答案 1 :(得分:2)
应该是:
void input(int (&a)[2]);
或只是
void input(int (&)[2]);
但是在函数定义中,您还需要提供数组名称:
void input(int (&a)[2]) {...}
您需要使用(&array)
向编译器说明您希望引用数组,而不是(无效)引用数组int &array[2];
。
并称之为:
input(a);
答案 2 :(得分:1)
返回和获取数组引用的语法是:
template<typename T, size_t N>
T(&do_nothing(T(&arg)[N]))[N]
{
return arg;
}
或者更简单地使用模板化类型别名:
template<typename T, size_t N> using arrayref = T(&)[N];
template<typename T, size_t N>
arrayref<T, N> do_nothing(arrayref<T, N> arg)
{
return arg;
}
当您定义了以前的类型别名模板时,使用数组引用变得非常简单,例如:这是你如何声明一个引用两个整数数组的函数:
void give_me_two_ints(arrayref<int, 2> two_ints);
用作:
int a[] = {1,2,3};
for(auto const& i : do_nothing(a)) std::cout << i << "\n";