如何将函数中计算出来的值保存在一个动态分配的内存中?

cang_er03 2009-05-15 04:12:50

m_pa=new double[data.m_AryLength/10];
for(int i=0;i<data.m_AryLength/10;i++)
{
data.PIs(); //假设函数中每次都计算得到一个值a,如何将它依次保存在m_pa中?

}
...全文
77 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cang_er03 2009-05-16
  • 打赏
  • 举报
回复
问题解决,受9楼的启发。
cang_er03 2009-05-15
  • 打赏
  • 举报
回复
我不用struct,我的代码其实是这样的:

void CQTAView::OnTrendidentification()
{
int nLen = data.m_AryLength/10;
ASSERT(nLen>0);
m_Plsy0=new double[nLen];
m_xAve=new double[nLen];
m_slope=new double[nLen];
data.m_Plsstart=10*m_start;
data.m_Plsend=10*(m_start+1);
data.m_pLsy0 = m_Plsy0;
data.m_pXAve = m_xAve;
data.m_pSlope= m_slope;
for(int m_start=0;m_start<nLen;m_start++)
{
data.PIs(data.m_pNumber,data.m_pDataAry,10*m_start,10*(m_start+1),m_Plsy0,m_xAve,m_slope);
//这个地方应如何添加?
m_Plsy0+=1;
m_xAve+=1;
m_slope+=1;
}
}

void CData::PIs(double xTime[],double yValue[],int m,int n,double* m_pLsy0,double* m_pXAve,double* m_pSlope)
{
//传入时间和变量值
//其中m为作最小二乘的起始点参数,n为作最小二乘的终点值参数
double sxx=0,sxy=0,syy=0; //初始化最小二乘的参数
double av_x=0,av_y=0,y0=0; //初始化最小二乘的参数
m_Plsstart=m,m_Plsend=n; //传入做最小二乘元素起始点,中止点
// double i_slope=0; //初始化直线的斜率
for(int i=m_Plsstart;i<m_Plsend;i++) //计算最小二乘估计均值参数
{
av_x+=xTime[i]/(m_Plsend-m_Plsstart); //计算时间均值
av_y+=yValue[i]/(m_Plsend-m_Plsstart); //计算变量的均值
}
for(int j=m_Plsstart;j<m_Plsend;j++) //计算最小二乘的参数
{
sxx+=(xTime[j]-av_x)*(xTime[j]-av_x); //计算的参数
sxy+=(xTime[j]-av_x)*(yValue[j]-av_y); //计算的参数
}
*m_pSlope=sxy/sxx; //计算拟合曲线的斜率
*m_pLsy0=av_y; //y均值
*m_pXAve=av_x; //x均值
//*m_pSlope,*m_pLsy0,*m_pXAve是我希望返回的值。
//return m_slope; //返回曲线的斜率
return;
}
yemingwy 2009-05-15
  • 打赏
  • 举报
回复
更正大,大概是这意思,你试试看



struct _data
{
double a, b, c;
}

int nLen = data.m_AryLength/10;
ASSERT(nLen>0);
m_pa=new _data[nLen];
for(int i=0;i <nLen;i++)
{
data.PIs(&m_pa[i]->a, &m_pa[i]->b, &m_pa[i]->c);
}


funs data.pis(double *a, double *b, double *c)
{
*a = 1.0f;
*b = 2.0f;
*c = 3.0f;
}

yemingwy 2009-05-15
  • 打赏
  • 举报
回复
struct _data
{
double a, b, c;
}

int nLen = data.m_AryLength/10;
ASSERT(nLen>0);
m_pa=new _data[nLen];
for(int i=0;i<nLen;i++)
{
data.PIs(&m_pa[0]->a, &m_pa[0]->b, &m_pa[0]->c);
}


funs data.pis(double *a, double *b, double *c)
{
*a = 1.0f;
*b = 2.0f;
*c = 3.0f;
}
菜牛 2009-05-15
  • 打赏
  • 举报
回复
你就把返回值添加到数组中呗,我怎么也想不明白到底什么地方使你为难?
cang_er03 2009-05-15
  • 打赏
  • 举报
回复
问题是很基础,但我现在遇到实际问题了,老是不对。如果我发一堆代码上来,没人回我。我把问题简化了,又很基础。
怎么样是好呢?我的确是新手。
用户 昵称 2009-05-15
  • 打赏
  • 举报
回复
通过参数返回,参数可以是基本变量,也可以是struct.
hurryboylqs 2009-05-15
  • 打赏
  • 举报
回复
一个函数只能有一个返回值,你要返回那么多那就返回一个结构或者从参数返回即可
然后再赋值,感觉问题很基础耶,打好基础
oyljerry 2009-05-15
  • 打赏
  • 举报
回复
m_pa、m_pb、m_pc 3个都用new的方法分别申请
cang_er03 2009-05-15
  • 打赏
  • 举报
回复
但如果我的data.PIs()中有三个返回值,比方说是a、b、c,如何保存在m_pa、m_pb、m_pc中呢?
hurryboylqs 2009-05-15
  • 打赏
  • 举报
回复

int nLen = data.m_AryLength/10;
ASSERT(nLen>0);
m_pa=new double[nLen];
for(int i=0;i<nLen;i++)
{
m_pa [i] = data.PIs();
}

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧