unqlite c库中,我找到了以下代码:

 pObj = jx9VmReserveMemObj(&(*pVm),&nIdx);

其中pVm是:
typedef struct jx9_vm jx9_vm;
jx9_vm *pVm

调用的函数声明为:
jx9_value * jx9VmReserveMemObj(jx9_vm *, sxu32 *);

在调用中使用的构造&(*pVm)而不是pVm是什么? &(*pVm)是否等于pVm

最佳答案

引用C11(第6.5.3.2节),地址和间接运算符



因此,,它们是等效的。

但是,可以使用此构造来根据指针类型检查参数的类型。从一元*运算符的属性中,



因此,构造&(*pVm)
如果pvm是指针或数组名称,则

  • 会很好。
  • 如果pvm是非指针类型变量,则
  • 将生成编译器错误。

  • 有关代码示例,请参见the other answer by Alter Mann

    另一个不同(通常)是,可以分配pVm(可以用作赋值运算符的LHS),但是&(*pVm)不能。

    关于c - 取消引用的指针构造的地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38915128/

    10-09 00:19