如何读取数组然后通过指针返回它

我试图读取这样的输入:

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`,它知道自己的大小。然后调用者可以遍历整个向量而无需考虑查找任何特定值。并且它不必担心在使用完向量后会破坏它,因为这将由编译器自动处理。

以上是如何读取数组然后通过指针返回它的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>