【求助】函数指针和结构体

手速极快 2021-02-05 05:33:23
结构体成员是u8,结构体指针,函数指针。调用函数指针的时候,另外两个成员地址会被改变,代码如下。第一次发贴有什么没做好的地方请见谅,谢谢了。

1.结构体原型和初始化:
typedef struct
{
uint8_t enableCRC; //crc校验使能
UartBuff* buff; //串口接收缓冲数据

void (*Send)(uint8_t* ,uint16_t ); //串口发送函数
}UartPort;
UartPort uart2={false , &uart2Buff , Uart2SendStr};

2.Uart2SendStr原型:
void Uart2SendStr(uint8_t *pstr,uint16_t strlen)
{
uint16_t i;

for(i=0;i<strlen;i++)
Uart2SendByte(pstr[i]);
}

3.函数调用:
void debug(UartPort* uart)
{
...
uart->Send("123",3);
...
}

函数调用前测试,另外两个成员地址正常,调用后地址变成0x3300,0x0031。

...全文
308 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
手速极快 2021-02-22
  • 打赏
  • 举报
回复
引用 6 楼 赵4老师 的回复:
应确保 结构体对齐 和 函数指针到底是32位还是64位
您好,我用的keilc51的软件,结构体内容我整个打印出来。发现数据并没有对齐,然而我没设置取消对齐。函数指针总共是3个字节,是参数的字节总和。
手速极快 2021-02-22
  • 打赏
  • 举报
回复
多谢各位了 问题找到了 是编译的问题
赵4老师 2021-02-06
  • 打赏
  • 举报
回复
应确保 结构体对齐 和 函数指针到底是32位还是64位
forever74 2021-02-05
  • 打赏
  • 举报
回复
指针太多,不说请调用链,一不小心哪个就是野指针了。
forever74 2021-02-05
  • 打赏
  • 举报
回复
莫名其妙变化这种事,疑似返回auto局部变量地址造成的。
forever74 2021-02-05
  • 打赏
  • 举报
回复
说清楚,什么叫另外两个,啥叫正常。 分别说清变量名,原值,变成什么了。 另外初始化时用到的uart2Buff是个什么东西,在哪定义的。
Simple-Soft 2021-02-05
  • 打赏
  • 举报
回复
贴一下比较完整的代码看看
手速极快 2021-02-05
  • 打赏
  • 举报
回复
有可能的问题点或者测试思路,也希望能提供一下

69,371

社区成员

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

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