有人可以解释这个C ++代码有什么问题吗? 我可以看到你不能用C ++返回一个数组(就像在其他语言中一样)所以我正在返回一个指针。我了解到将指针设置为“myArray”的地址是没有意义的 - 因为“myArray”已经是一个地址(第一项)
我预期的输出 1,2,3,4
在不同的(在线)编译器上我在这里得到了不同的奇怪结果,包括:
所以这是我狡猾的代码:
<uses-feature>
非常感谢您提供的任何帮助!
答案 0 :(得分:3)
您正在返回一个指向函数的 local 变量的指针,该函数在函数返回时不再存在。
int* getArray(){
int myArray[] = {1,2,3,4};
int* pointerToArray = myArray;
return pointerToArray;
}
<myArray
会在getArray()
返回时有效消失。
这将起作用,因为它给出了变量静态持续时间,这意味着它一直存在(但是每次调用该函数时,只有一个变量实例而不是实例):
int* getArray(){
static int myArray[] = {1,2,3,4};
int* pointerToArray = myArray;
return pointerToArray;
}
还有许多其他解决方案,包括使用new
动态创建数组。
答案 1 :(得分:2)
std::array
,您可以这样做:
#include <iostream>
#include <array>
std::array<int, 4> getArray(){
return {{1,2,3,4}};
}
template <std::size_t N>
void printArray(const std::array<int, N>& a) {
for (int e : a) {
std::cout << e << ", ";
}
}
int main()
{
printArray(getArray());
}
答案 2 :(得分:0)
你有一个范围问题,一个。 myArray
在getArray
中被静态声明,因此只要getArray
返回,其他人的内存就可以免费使用/覆盖。
如果你想使用C数组:
#include <alloc.h>
...
int *getArray()
{
int *myArray = (int *)malloc(4 * sizeof(int));
myArray[0] = 1;
...
myArray[3] = 4;
return myArray;
}
int printArray(int *array, uint length) {
...
free(array);
}
当然适当地填写椭圆。