我想问一下,为什么这段代码不起作用......
int* funkce(){
int array[] = {1,2,3,4,5};
return(array);
}
int main(){
int* pp = funkce();
int* ppk = pp+5;
for (int *i = pp; i!=ppk; i++){
cout << (*i) << endl;
}
system("PAUSE");
return(0);
}
此代码显示:
1
16989655
4651388
- // -
253936048
所以poniter不在阵列中...... 但是怎么可能,这个带有Main数组的代码可以吗?
int main(){
int a[] = {1,2,3,4,5};
int* pp = a;
int* ppk = pp+5;
for (int *i = pp; i!=ppk; i++){
cout << (*i) << endl;
}
system("PAUSE");
return(0);
}
此代码显示:
1
2
3
4
5
你能解释一下,为什么第一个不起作用? 谢谢!
答案 0 :(得分:6)
当函数结束时,您将返回指向超出范围的临时指针。如果你想让一个函数返回一个数组,你需要做一个:
std::array<int, 5> func() {
// stack-allocated
std::array<int, 5> a = {1, 2, 3, 4, 5};
return a;
}
std::vector<int> func() {
// heap-allocated
std::vector<int> a = {1, 2, 3, 4, 5};
return a;
}
int* func() {
// heap-allocated, you have to remember to delete it
int* a = new int[5]{1, 2, 3, 4, 5};
return a;
}
等。还有更多选择,但这应该会给你一个良好的开端。
答案 1 :(得分:0)
永远不要返回本地指针/引用变量,该内存在返回时被释放/重用。
使用悬挂引用是未定义的行为并且具有不可预测的后果。
返回一个对象,一个指向堆分配内存的指针,或保存到调用者提供的缓冲区中。