[英]How to pass array reference from function? [duplicate]
我想通过引用传递函数中数组的值
我第一次尝试使用变量 (效果很好):
#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]; } }
该记录
int &[]
表示C ++中禁止使用的引用数组。
通过以下方式声明功能
void input(int(&)[2]);
另外,您使用的索引范围无效。 有效范围是[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 );
它应该是:
void input(int (&a)[2]);
或简单地
void input(int (&)[2]);
但是在函数定义中,您还需要指定数组名称:
void input(int (&a)[2]) {...}
您需要使用(&array)
向编译器说明您要引用数组,而不是引用的(无效)数组int &array[2];
。
并这样称呼它:
input(a);
返回和获取数组引用的语法为:
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";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.