函数接受结构的void指针,并将指向其成员的指针传递给另一个函数

时间:2012-04-27 00:58:48

标签: 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指针,然后将其强制转换为获取指向其成员usXusY的指针。然后将其传递给内部函数,该函数会更改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的值现在应该在调用函数中有所不同。

这一切都可能吗?指针和引用总是让我感到非常困惑。

1 个答案:

答案 0 :(得分:0)

假设(通过命名约定)usXusY成员只是unsigned short(它们不是指针),那么你想:

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

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

相反,你想:

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

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