将变量作为函数参数中的引用传递给数组的初始化

时间:2017-04-09 01:38:10

标签: c++ arrays function variables parameters

我最近一直在努力学习C ++,并且做一些黑客对入门任务进行排名。我试图进行https://www.hackerrank.com/challenges/deque-stl挑战,但我对c ++语法和基础“数组”的使用非常不熟悉。如果我愿意,我至少会使用std :: array(虽然我知道这只是默认C数组的零开销包装)。

我的问题是:

#include <iostream>
#include <deque> 
#include <vector>
#include <array>
#include <typeinfo>

using namespace std;
void printKMax(int (&arr)[n], int n, int k){
   //Write your code here.
    deque<int> d(arr);
    cout << arr[3];
    for(int i:d) {cout <<i;}

}
int main(){

   int t;
   cin >> t;
   while(t>0) {
      int n,k;
       cin >> n >> k;
       int i;
       int arr[n];
       for(i=0;i<n;i++)
            cin >> arr[i];
       printKMax(arr,n, k);
       t--;
     }
     return 0;
}

我正在尝试将arr传递给printKMax,并将其作为参考接收。 我收到的错误是:

!‘arr’ was not declared in this scope
!‘n’ was not declared in this scope
!variable or field ‘printKMax’ declared void
!expected primary-expression before ‘int’
!expected primary-expression before ‘int’

如果我使用常量int,例如“5”,arr [5],它会通过。(在函数调用中也传递arr [5])。但如果我用n替换它,它就不起作用。

也就是说,此时,函数调用[不是定义]是printKMax(arr,n,k),我认为没有理由在这里添加arr [n](因为它已隐含在它被声明为:int arr [n])。我试图将它作为参考传递,而不会将其衰减成指针。我也把它传递给* arr,但没有成功。

我在网上看到它的重要性,将它保持为(&amp; arr)[100]或类似的东西,但在这里我有(&amp; arr)[n],它超出了范围。我很想写(&amp; arr)[],但是我得到了这个错误:

parameter ‘arr’ includes reference to array of unknown bound ‘int []’

提前致谢!另外,这只是数组的问题吗?如果我开始使用和来自例如boost库的数据结构,我会遇到类似的问题吗?

PS:忽略deque代码,我只是在玩,尝试使用与我传递的数组相同的元素初始化它。它可能是不兼容的,因为一个是std ::而另一个是默认数组,不幸的是......?

0 个答案:

没有答案