#include<iostream>
using namespace std;
int *Arr(int y,int size){
int arg[size];
for(int i=size-1;i>=0;i--){
arg[i]=y%10;
y=y/10;
}
return arg;
}
int main(){
int *p=Arr(2587,4);
for(int j=0;j<4;j++){
cout<<p[j]<<" ";
}
return 0;
}
> Blockquote
我不知道为什么这不起作用......我试图支持一个阵列,但问题是在第二位。可以帮助某人;)谢谢
答案 0 :(得分:1)
问题是你将结果放入一个在函数结束时被销毁的本地数组。您需要动态分配数组,以使其寿命不限于在其中创建的函数:
#include<iostream>
using namespace std;
int *Arr(int y, int size)
{
// This local array will be destroyed when the function ends
// int arg[size];
// Do this instead: allocate non-local memory
int* arg = new int[size];
for(int i = size - 1; i >= 0; i--)
{
arg[i] = y % 10;
y = y / 10;
}
return arg;
}
int main()
{
int *p = Arr(2587, 4);
for(int j = 0; j < 4; j++)
{
cout << p[j] << " ";
}
// You need to manually free the non-local memory
delete[] p; // free memory
return 0;
}
注意:强>
如果可能,应避免使用new
分配动态内存。您可能想要研究智能指针来进行管理。
另外,在真正的C++
代码中,您将使用像std::vector<int>
这样的容器而不是内置数组
答案 1 :(得分:0)
当然它不起作用。
充其量,行为未定义,因为Arg()
正在返回(arg)
不再存在的局部变量main()
的地址。 main()
使用返回的地址,如果它不是您的程序所涉及的任何地址。
还有一个偶然的问题是int arg[size]
,其中size
在编译时没有修复,是无效的C ++。根据编译器的严格程度(某些C ++编译器拒绝无效C ++的构造,但其他人接受这样的扩展),您的代码甚至无法成功编译。
要解决此问题,请让您的函数返回std::vector<int>
(vector
是标准标题<vector>
中定义的模板化容器)。然后你需要做的就是将值添加到本地向量中,该值可以通过值安全地返回给调用者。
如果你做得对,你甚至不需要在你的代码中的任何地方使用指针。