0

はい、タイトルは私が混乱しているのと同じくらい混乱しています。コードは、私が達成しようとしていることを示すのに役立つ場合があります。

関数では、これを渡します。

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);

受信側のドライバー関数は、 のアドレスをstConvertPointvoid ポインターとして受け取り、それをキャストしてメンバーへのポインターを取得する必要がusXありusYます。これは内部関数に渡され、 と の値が変更されusXますusY

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.usXとの値stConvertPoint.usYが異なるはずです。

これはまったく可能ですか?ポインターと参照は、常に私をひどく混乱させます。

4

1 に答える 1

0

usX(命名規則により)およびusYメンバーが単純なunsigned short(ポインターではない) と仮定すると、次のことは望ましくありません。

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

これにより、無効で役に立たないポインターが作成されます。

代わりに、次のようにします。

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

これは、構造体の 2 つのメンバーへのポインターです。

于 2012-04-27T01:20:21.560 に答える