什么是通过引用访问阵列的正确方法

时间:2016-09-17 14:02:09

标签: c++

如何使用引用arrref

访问main中的数组

以下代码中的内存泄漏旨在了解valgrind工具。但我无法编译下面的代码

can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [classes.jar:META-INF/MANIFEST.MF])
can't write resource [.readme] (Duplicate zip entry [classes.jar:.readme])
can't write resource [.readme] (Duplicate zip entry [classes.jar:.readme])

由于

2 个答案:

答案 0 :(得分:0)

所需的语法是(&arrref)[1]。这是指数组的 second 元素。

但请确保从func返回的引用确实引用了具有足够元素数的数组的第一个元素。

要清楚地传达func返回对数组的引用,您可能希望返回一个范围,例如:

#include <iostream>
#include <boost/range/as_array.hpp>

boost::iterator_range<int*> func() {
    static int array[2] = {1, 2};
    return boost::as_array(array);
}

int main() {
    auto array = func();
    std::cout << array[0] << '\n';
    std::cout << array[1] << '\n';
    for(auto const& value: func())
        std::cout << value << '\n';
}

输出:

1
2
1
2

答案 1 :(得分:-1)

首先,在一些其他函数中访问一个函数的局部变量并不是一个好主意。 函数返回类型是int&amp;表示您要返回对int变量的引用。 如果要访问数组本地数组'a',则应将该函数重写为 -

 #include <iostream>
 int* func();

  int main() 
  {

  int *arrref = func();
   std::cout<<arrref[1];//Error
  std::cout<<&arrref[1];//Error


  }

  int *func()
 {

     int *a = new int[10];
     for(int i = 0;i<10 ;++i)
        a[i] = i*2;
     return a;

  }

或者你也可以使用矢量 -

  #include<iostream>
  #include<vector>
  std::vector<int>& func();

  int main() 
  {

    std::vector<int>& arrref = func();
    std::cout<<arrref[1];//Error
    std::cout<<&arrref[1];//Error


   }

   std::vector<int>& func()
   {

    std::vector<int> a(10);
    for(int i = 0;i<10 ;++i)
        a[i] = i*2;
    return a;

    }