首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

关入函数返回值或参数是结构体的有关问题

2012-11-06 
关入函数返回值或参数是结构体的问题Keil C下一个计算坐标的函数W_ComputeG,最开始是想把计算后的结果直接

关入函数返回值或参数是结构体的问题
Keil C下一个计算坐标的函数W_ComputeG,
最开始是想把计算后的结果直接Return的,后来发现不行,网上查了下资料说是局部变量在函数结束后被释放了,所以无法返回正确的结果
后来又把计算的结果放在参数中,结果还是不对



C/C++ code
//struct.h#ifndef _STRUCT_H_#define _STRUCT_H_struct typeps{int x;int y;};typedef struct typeps CPOS;//定义坐标....#endif




C/C++ code
//main.c#ifnef _STRUCT_H_#include "struct.h"#endifxdata CPOS gp;/**************************************************************************Name:         W_ComputGReturn:           重心位置Parameter:Description:   计算中心假设传感器这样排列  Y 100CH1                   CH4(100,100)    ^                                |                                |                                |CH2(0,0)         CH3            ------->X  100***************************************************************************/CPOS W_ComputG1(void)  //该方法被证明行不通{    float g;    long tot;         CPOS temp;    tot=wei[0]+wei[1]+wei[2]+wei[3];    if(tot<=0)    {        temp.x=temp.y=50;        return temp;    }    g=(float)(wei[0]+wei[3])/tot;    temp.y=(int)ceil(g*100);    g=(float)(wei[2]+wei[3])/tot;    temp.x=(int)ceil(g*100);}void W_ComputG2(CPOS temp){    float g;    long tot;    tot=wei[0]+wei[1]+wei[2]+wei[3];    if(tot<=0)    {        temp.x=temp.y=50;        return;    }    g=(float)(wei[0]+wei[3])/tot;    temp.y=(int)ceil(g*100);    g=(float)(wei[2]+wei[3])/tot;    temp.x=(int)ceil(g*100);}void main(void){...    W_ComputeG2(gp);}


仿真时观察W_Compute2中的temp没发现错误,但temp值无法正确的传递到gp,
有人知道原因么?

[解决办法]
仿真时观察W_Compute2中的temp没发现错误,但temp值无法正确的传递到gp,
----------
参数传递时是复制了一个副本(临时对象)然后才传给函数的,原来的对象是不会变的。函数返回后临时对象就没有了。你可以把一个对象的指针传给它,函数用指针访问你的结构体,修改了的结果可以保存。

CPOS W_ComputG1(void) 你的这个函数有些返回路径没有给出返回值,是要出问题的。(这个方法写好了该可以的吧)
[解决办法]
//下面的函数返回 CPoint 值,不是 CPoint *地址
CPoint W_ComputG1(void) //该方法行
{
CPoint tmp;
tmp.x=125;
tmp.y=250;
return tmp;
}
//调用:
CPoint ret=W_ComputG1();

[解决办法]
void W_ComputG2(CPoint *temp)
{
temp->x=125;
temp->y=250;

}

[解决办法]
你现在传入的是值参数,对他进行的也只能是值的副本进行修改。
你传入的参数用指针代替,这样就能够正确了。
[解决办法]
支持传指针
[解决办法]
用指针 或者 全局变量 实现

热点排行