西奥伟 发表于 2018-11-13 14:03:53

分享一个有关于code的问题,大家一起来讨论下原因

本函数是HAL库串口接收报文数据的解析函数,其中reqCommand为接收到的命令,ackData为接收到的数据实体,ackDataSize为接收到的数据实体的大小,但是,在主函数中调用本函数,会出现传入的参数cmd,RcvMsg,MsgLen接收到的数据始终为0.
并且,Keil编译器会提示警告,如下图所示。


最后,经过调试修改发现,将3个参数解引用的写法,调用该函数,能够正确返回接收到的数据值。为什么上面一种写法,不能够正常实现?








dsjsjf 发表于 2018-11-13 14:43:32

因为你定义的是指针,它在函数入口处已经赋了地址值,你进函数内部,把这个地址值改掉了,,调用它的地方是不会知道的

toofree 发表于 2018-11-13 14:47:58

本帖最后由 toofree 于 2018-11-13 14:53 编辑

不要试图修改传进来的指针,但可以修改指针指向的内容。
函数内部改了传递指针,在函数外部也就改了。
如果是类似FIFO、链表之类的, 的确是要改指向全局变量数组的指针情况,那可以用。
C语言指针,把人给绕的


西奥伟 发表于 2018-11-13 15:17:28

dsjsjf 发表于 2018-11-13 14:43
因为你定义的是指针,它在函数入口处已经赋了地址值,你进函数内部,把这个地址值改掉了,,调用它的地方是 ...

嗯嗯,明白了

西奥伟 发表于 2018-11-13 17:00:32

toofree 发表于 2018-11-13 14:47
不要试图修改传进来的指针,但可以修改指针指向的内容。
函数内部改了传递指针,在函数外部也就改了。
如果 ...

谢谢大哥指教
页: [1]
查看完整版本: 分享一个有关于code的问题,大家一起来讨论下原因