【发布时间】:2018-01-13 10:38:54
【问题描述】:
我正在阅读这篇文章 [Function returning a pointer to an int array] 并了解返回 pointer to int 和 pointer to an array of int 之间的区别。
我在尝试总结时遇到了一些问题。首先,看一下这段代码(保持简单):
函数 test 和 test2 返回 pointer to int 和 pointer to an array of int
int* test(size_t &sz) {
int *out = new int[5];
sz = 5;
return out;
}
int (*test2())[3] {
static int out[] = {1, 2, 3};
return &out;
}
如何更改 test2 才能使用动态数组(不是静态数组)?是否可以将数组大小作为参考或以某种方式传递?
主要功能看起来像这样。代码编译。
int main() {
size_t sz;
int *array = test(sz);
for (size_t i = 0; i != sz; ++i) {
array[i] = 10;
cout << *(array + i) << " ";
}
cout << endl;
delete[] array;
int (*array2)[3] = test2();
for (size_t i = 0; i != 3; ++i) {
cout << (*array2)[i] << " ";
}
}
结果
10 10 10 10 10
1 2 3
【问题讨论】:
-
为什么还要使用动态分配的数组呢?
std::vector呢? -
另外,如果您的问题标题是
return &out;,请记住static是dynamic的反义词 -
我不是编译器,但 test2 不会在我的脑海中编译。
-
它会编译。我不能用动态数组得到它。