如何读取数组然后通过指针返回它
我试图读取这样的输入:
5
1 2 3 4 5
第一个是数组的大小,另一个是数组,输出只是读取的数组。
但是使用这段代码,我不断得到这个输出:
1 2 3 4 5 0 1871824307 62958 7346864 0 7340368 0
我真的想不通为什么。
#include<iostream>
using namespace std;
int* readArray()
{
int n;
cin>>n;
int *arr = new int[n];
for (int i=0;i<n;i++){
cin>>arr[i];
}
return arr;
}
int main()
{
int *p= readArray();
int *q = p;
while(*p !=-1)
{
cout<<*p<<" ";
p = p + 1;
}
delete[] q;
return 0;
}
回答
通过写入,while(*p != -1){...; p++;}您正在递增,p直到 p 指向的值是 -1。如果你想以 -1 结束数组,你应该对你的代码做一些改变
#include<iostream>
using namespace std;
int* readArray()
{
int n;
cin>>n;
int *arr = new int[n+1]; //note here the extra 1
for (int i=0;i<n;i++){
cin>>arr[i];
}
arr[n] = -1; // adding a -1 to the end of the array
return arr;
}
int main()
{
int *p= readArray();
int *q = p;
while(*p !=-1)
{
cout<<*p<<" ";
p = p + 1;
}
delete[] q;
return 0;
}
- 虽然这有效,但更好的选择是返回一个 `std::vector`,它知道自己的大小。然后调用者可以遍历整个向量而无需考虑查找任何特定值。并且它不必担心在使用完向量后会破坏它,因为这将由编译器自动处理。