繁体   English   中英

如何从函数传递数组引用? [重复]

[英]How to pass array reference from function? [duplicate]

我想通过引用传递函数中数组的值

  1. 我第一次尝试使用变量 (效果很好):

     #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; } 
  2. 但是,当我改变aa[]像下面的代码,这是行不通的

     #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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM