首页 > 解决方案 > (type *)var 和 (type *)&var 的区别

问题描述

我正在阅读一篇关于 Kerberos 凭据窃取的非常有趣的文章。在 PoC 中,作者有以下一行:

struct inotify_event *event = (struct inotify_event *)&buffer[i];

其中缓冲区定义为

char buffer[BUF_LEN];

我想知道的是上面的这种类型转换是如何工作的,它与

(struct notify *)buffer[i];

虽然我知道被转换的类型分别是char *char,但我无法理解作者为什么以及如何将其转换为结构并随后访问它的成员

标签: cpointerscasting

解决方案


(type *)var 和 (type *)&var 的区别

前者将 的值var转换为指向 的指针typevar当包含表示对象地址的值时,这可能是合理的type。鉴于var在您的情况下是 a char,将其值重新解释为指针可能是不合理的。

后者将指向 的指针转换为指向var的指针type。这可能是合理的,当var它及其兄弟代表一个您希望解释为的值时type


推荐阅读