不使用“.”访问结构成员或“->”运算符

Access structure members without using '.' or '->' operator

如何在不使用“.”的情况下从戴尔笔记本电脑定义中访问 keyValue 和 alternateKeyValue或“->”运算符直接引用 qwerty 结构或其成员。

我尝试寻找解决方案,但没有找到。你能帮我想办法访问它吗?

typedef enum
{
    MOUSE_NONE,
    MOUSE_UP,
    MOUSE_DOWN,
    MOUSE_LEFT,
    MOUSE_RIGHT,
} mouse_direction_E;

typedef struct
{
    bool leftButton;
    bool rightButton;
    bool middleButton;
    bool mouseOn;
    mouse_direction_E direction;
} mouse_S;

typedef struct
{
    char keyValue;
    char alternateKeyValue;
} keyboard_S;

typedef struct
{
    mouse_S simpleMouse;
    keyboard_S qwerty;
} laptop_S;

laptop_S dell =
{
    .simpleMouse =
    {
        .leftButton = false,
        .rightButton = false,
        .middleButton = false,
        .mouseOn = false,
        .direction = MOUSE_NONE,
    },
    .qwerty =
    {
        .keyValue = '5',
        .alternateKeyValue = '%'
    },
};

这听起来像是一道作业题....

这个怎么样:

int index = 0;
bool leftMouseButton = *( (bool *) &( ( (char*) &dell )[0]) );
/*                                              \ 1 / 
 *                                       \  2 /
 *                                                     / 
 *                                 \___________ 4 _________/
 *                        \_ 5 _/
 *                     \_________________ 6 _________________/
 */
bool rightMouseButton = *( (bool *) &( ( (char*) &dell )[ sizeof(bool) - 1 ]) );
/* etc.  Enjoy the math! */

换言之:

对于位于 x 字节深处的任何结构元素 dell

  1. 获取dell
  2. 的地址
  3. 将指针地址转换为字节(字符)数组——或者如果所有结构内容的大小与 int 相同,则将地址转换为 int*(请记住相应地调整后续数学!)
  4. 确定所需元素距结构开头的偏移量dell
  5. 获取所需元素的地址。
  6. 将该地址转换为与我们当前使用的元素类型相同的指针。
  7. 在我们当前使用的元素的地址处获取数据。也就是说:获取元素的值。

告诉我作业的完成情况!