我的问题是我不知道我放入数组的数据会发生什么,以及如何让它们保持在数组中。在调试时很明显,arr用零填充,而arr2用{1,2,3}初始化。但是函数会返回一些随机值..有人可以帮我指出它应该是什么样的吗?
#include <iostream>
#include <algorithm>
#include <vector>
class A
{
private:
double arr[5];
public:
A()
{
std::fill( arr, arr + 5, 0.0 );
};
~A() {};
void setArr( double arrx[] )
{
for ( int i = 0; i < 5; i++ )
arr[i] = arrx[i];
}
double* getArr(void) { return arr;}
};
int* probe()
{
int arr2[3] = {1,2,3};
return arr2;
}
int main()
{
A ob1;
double rr[5] = {1,2,3,4,5};
ob1.setArr(rr);
std::cout << ob1.getArr() << std::endl;
std::cout << probe() << std::endl;
system("Pause");
}
编辑: 现在谢谢你,我意识到我必须循环get **函数来获取所有值。但是,如果我的计划用法是将其写入下面的某个文件中,我该如何循环呢?
pF = fopen ("myfile.csv","a");
if (NULL != pF)
{
char outp[1000];
sprintf_s(outp, 1000, "%6d,\n", ob1.getArr());
fputs(outp, pF);
fclose(pF);
}
答案 0 :(得分:1)
在
std::cout << ob1.getArr() << std::endl;
std::cout << probe() << std::endl;
您实际上是在打印指针(地址),而不是double
或int
的值。您需要循环遍历数组的所有元素以打印它们。
正如P0W所指出的,probe()
的访问元素具有未定义的行为,在这种情况下,您必须确保该数组应该有效。一个快速的解决方案是在函数中声明数组静态。
您想在文件中写入值
pF = fopen ("myfile.csv","a");
if (NULL != pF)
{
char outp[1000];
int i;
int retsofar=0;
for(i=0;i<5;++i)
retsofar+=sprintf_s(outp+retsofar, 1000-retsofar, "%6d,\n", ob1.getArr()[i]);
fputs(outp, pF);
fclose(pF);
}
答案 1 :(得分:0)
您正在尝试打印ob1.getArr()
和probe()
方法返回的数组的地址。每次你得到不同的地址。如果要打印数组,请使用循环。
在probe()中,您在堆栈上创建一个数组并简单地返回它的指针。这不安全。当它超出范围时,其值可能会被覆盖,您可能会得到不期望的行为。所以在堆上创建该数组。