gpt4 book ai didi

c++ - 使用指针显示数组的值

转载 作者:行者123 更新时间:2023-11-28 01:29:57 26 4
gpt4 key购买 nike

我的问题图片:/image/x5VQW.png

总而言之,在一个函数 readNumbers 中,我将创建一个大小为 10 的数组,并返回指向该数组的指针。然后我有第二个函数 printNumbers,它从上述函数获取指针(和数组的长度 10)并打印数组中的索引和对应值。

我的函数文件:

#include <iostream>
using namespace std;

int *readNumbers()
{
int arr[10];
for (int i=0; i<10; i++) //asking for 10 values
{
cout<<"Enter an element: ";
cin>>arr[i];
}

int *arrPtr;
arrPtr=&arr[0];

return arrPtr;

}




void printNumbers(int *numbers,int length)
{


for (int i=0; i<length; i++)
{
cout<<i<<" "<<*(numbers+1)<<endl;
}
delete numbers;

}

主文件:

int *readNumbers() ;
void printNumbers(int *numbers,int length) ;

int main (void)
{



printNumbers(readNumbers(), 10) ;


}

代码可以编译,但是,打印的数组元素并不是输入编译器的元素。

还有,题天删除数组。这与清理堆空间有关吗?这是通过删除指向数组的指针来实现的,就像我在第二个函数中所做的那样吗?

谢谢。

最佳答案

在您的函数中,您静态分配了一个大小为 10 的数组,因此它只存在于函数退出之前。在那之后,你会得到未定义的行为,因为你正在从不再属于你的内存中读取随机字节。

你想要的是动态分配数组,这可以使用 new

轻松完成
int* arr = new int[10];

然后你只需return arr;

当然,不要忘记在使用完内存后通过调用delete[](而不是没有大括号的delete)来清除内存。

作为旁注,调用 return arrPtr 与调用 return arr 相同,后者自然会衰减为指针。这是错误的,因为该指针最终指向不再存在的东西。

关于c++ - 使用指针显示数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51966551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com