c - 函数采用结构体的 void 指针,并将指向其成员的指针传递给另一个函数

标签 c pointers struct

是的,这个标题和我一样令人困惑。该代码可能有助于展示我想要实现的目标;

在一个函数中,我传递了这个;

RESTOUCH_POINT_STRUCT stConvertPoint;

stConvertPoint.usX = astLCDPoints[0].usX;
stConvertPoint.usY = astLCDPoints[0].usY;

Driver_Control((DRIVER_STRUCT*)pstResTouch->pstDisplay, CMD_CONVERT_POINT_TO_ORIENTATION, &stConvertPoint);

接收驱动函数,需要接受stConvertPoint的地址作为void指针,然后对其进行转换以获得指向其成员usX的指针,以及 usY。然后,该值被传递给内部函数,该函数会更改 usXusY 的值。

DRIVER_RETURN ILI9328_Control(DRIVER_STRUCT *pstDriver_, USHORT usID_, void *pvData_)
{
...
case CMD_CONVERT_POINT_TO_ORIENTATION:
{
  DRAW_POINT_STRUCT* pstPoint = (DRAW_POINT_STRUCT*)pvData_;
  USHORT *pusX;
  USHORT *pusY;

  pusX = (USHORT*)pstPoint->usX;
  pusY = (USHORT*)pstPoint->usY;

  ILI9328_ConvertPointOrientation(pstDriver_, pusX, pusY);
}
break;

假设这一切都有效,则调用函数中的 stConvertPoint.usXstConvertPoint.usY 的值现在应该不同。

这有可能吗?指针和引用总是让我非常困惑。

最佳答案

假设(根据命名约定)usXusY 成员只是 unsigned Short(它们不是指针),那么你想要:

pusX = (USHORT*)pstPoint->usX;
pusY = (USHORT*)pstPoint->usY;

这将创建无效且无用的指针。

相反,你想要:

pusX = &pstPoint->usX;
pusY = &pstPoint->usY;

这是指向该结构的两个成员的指针。

关于c - 函数采用结构体的 void 指针,并将指向其成员的指针传递给另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10343407/

相关文章:

c++ - 不能取消引用类型定义结构指针的成员

c - 使用 gcc 链接到 sqlite3.h 的问题

c - 如何找到数组的大小(从指向数组第一个元素的指针)?

c - 将一个指向struct的指针和一个int传递给C中的函数以实现堆栈

c - C 中的 15 位结构

c++ - 返回结构体 char* 的问题

c - 服务创建socket失败怎么办?

c - 将结构类型转换为整数时出错

C fork 函数在 Unix (HP-UX) 上的奇怪行为

c++ - 如何将元素添加到链表的末尾