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;
}
------解决方案--------------------
你现在传入的是值参数,对他进行的也只能是值的副本进行修改。
你传入的参数用指针代替,这样就能够正确了。
------解决方案--------------------
支持传指针
------解决方案--------------------
用指针 或者 全局变量 实现