【发布时间】:2019-01-28 16:43:38
【问题描述】:
我的问题图片:https://i.stack.imgur.com/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) ;
}
代码会编译,但是,打印的数组元素不是输入编译器的元素。
还有,要删除数组的问题天数。这与清除堆空间有关吗?这是通过删除指向数组的指针来实现的,就像我在第二个函数中所做的那样?
谢谢。
【问题讨论】:
-
请注意:输入不会输入编译器。编译过程发生在程序运行之前。
-
使用
std::array<int, 10>或std::vector<int>。 -
描述中的“动态分配”这几个字很重要。你要么错过了那个细节,要么没有意识到它们的重要性。
标签: c++ arrays pointers dynamic memory-address