请教一个传参的问题

孙亖
博客专家认证
2015-05-08 11:11:04
pid.kp = mavlink_msg_setpid_get_p(&msg);
pid.ki = mavlink_msg_setpid_get_i(&msg);
pid.kd = mavlink_msg_setpid_get_d(&msg);
savePID(pid.kp, pid.ki, pid.kd);
问题是这样的,kp, ki, kd是float型的,获取的值正常,为什么调试进入savePID后,值就变了,为什么?
...全文
386 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
13123214 2016-06-03
  • 打赏
  • 举报
回复
这个问题 你至少要把 savePID 声明贴出来吧
yfannnnn 2016-06-03
  • 打赏
  • 举报
回复
编译的时候 看看有没有 warning 说了 强转的问题
yfannnnn 2016-06-03
  • 打赏
  • 举报
回复
被强转了吧, 楼主检查一下参数类型是不是匹配。
孙亖 2016-06-03
  • 打赏
  • 举报
回复
楼上各位大侠,貌似我问的不是调试和vs使用问题。
赵4老师 2015-05-28
  • 打赏
  • 举报
回复
以下是VC6在调试时设置变量值改变断点的办法: To set a breakpoint when a variable changes value From the Edit menu, click Breakpoints. Click the Data tab of the Breakpoints dialog box. In the Expression text box, type the name of the variable. Click OK to set the breakpoint. VS2010在调试时设置变量值改变断点参考下面:
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]

    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}
孙亖 2015-05-28
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
To set a breakpoint when a variable changes value From the Edit menu, click Breakpoints. Click the Data tab of the Breakpoints dialog box. In the Expression text box, type the name of the variable. Click OK to set the breakpoint.
这个。。。
zuxi 2015-05-08
  • 打赏
  • 举报
回复
你要看看savePID的参数类型是什么,有可能类型默认转换了。 另外你在savePID(pid.kp, pid.ki, pid.kd);这一行设置断点,看看pid.kp,pid,ki,pid.kd这三个值是多少,然后再单步进入savePID看看这三个值是多少。
ri_aje 2015-05-08
  • 打赏
  • 举报
回复
信息太少,你怎么确定进入 saveid 后值就变了?
赵4老师 2015-05-08
  • 打赏
  • 举报
回复
To set a breakpoint when a variable changes value From the Edit menu, click Breakpoints. Click the Data tab of the Breakpoints dialog box. In the Expression text box, type the name of the variable. Click OK to set the breakpoint.
zuxi 2015-05-08
  • 打赏
  • 举报
回复
引用 4 楼 rocshaw 的回复:
[quote=引用 2 楼 wangzuxi 的回复:] 你要看看savePID的参数类型是什么,有可能类型默认转换了。 另外你在savePID(pid.kp, pid.ki, pid.kd);这一行设置断点,看看pid.kp,pid,ki,pid.kd这三个值是多少,然后再单步进入savePID看看这三个值是多少。
那三个值没有变,因为我一直循环打印那三个值是正常的,可是单步进入savePID后函数里面的参数值就变了。[/quote] 你截图上来看看吧
孙亖 2015-05-08
  • 打赏
  • 举报
回复
引用 2 楼 wangzuxi 的回复:
你要看看savePID的参数类型是什么,有可能类型默认转换了。 另外你在savePID(pid.kp, pid.ki, pid.kd);这一行设置断点,看看pid.kp,pid,ki,pid.kd这三个值是多少,然后再单步进入savePID看看这三个值是多少。
那三个值没有变,因为我一直循环打印那三个值是正常的,可是单步进入savePID后函数里面的参数值就变了。
孙亖 2015-05-08
  • 打赏
  • 举报
回复
引用 1 楼 ri_aje 的回复:
信息太少,你怎么确定进入 saveid 后值就变了?
save后,我取出来变了,然后我就用调试工具进去,发现在函数里面值就变了。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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