地址运算符和汇编中的指针之间有区别吗?

Is there a difference between the address operator and a pointer in assembly?

编译器转换地址运算符是否与指针有任何不同?

我想知道,因为反编译器有时会向我显示:

func_test(&a, &b[0x32*ebx])

这应该与

基本相同
func_test((_DWORD *)a,(_DWORD *)(b+0x32*ebx))

正确吗?我对算术 tbh 感到困惑。 这样显示是有什么特殊意义还是只是为了方便阅读?

&a returns a 的地址,而 (_DWORD *)a 强制编译器将 a 的内容重新解释为指向 _DWORD。所以这两个表达方式根本不同。

如果 a_DWORD 的数组(像 _DWORD a[A_LENGTH]; 那样声明),它可能是等价的。在这种情况下,&aa 本质上与 a 相同,在指针上下文中退化为简单指针,尽管 _DWORD * 强制转换是多余的。

b 的表达式是等价的。