如何使用引用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])
由于
答案 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;
}