shi*_*mot 7 c syntax pointers addressof dereference
在unqlite c库中,我找到了以下代码:
pObj = jx9VmReserveMemObj(&(*pVm),&nIdx);
Run Code Online (Sandbox Code Playgroud)
在哪里pVm:
typedef struct jx9_vm jx9_vm;
jx9_vm *pVm
Run Code Online (Sandbox Code Playgroud)
和被调用的函数声明为:
jx9_value * jx9VmReserveMemObj(jx9_vm *, sxu32 *);
Run Code Online (Sandbox Code Playgroud)
什么构造&(*pVm)用于呼叫而不是只是pVm?是&(*pVm)相当于pVm?
引用C11,章节§6.5.3.2,地址和间接操作符
[...]如果操作数是一元运算
*符的结果,那么运算符和运算符 都不会&被计算,结果就好像都被省略了,除了对运算符的约束仍然适用且结果不是左值.[...]
所以,是的,它们是等价的.
但是,可以使用此构造来检查针对指针类型的参数类型.从一元运算*符的属性,
一元运算
*符的操作数应具有指针类型.
所以,构造 &(*pVm)
pvm是指针或数组名称.pvm是非指针类型变量,将生成编译器错误.请参阅Alter Mann的其他答案,以获取代码示例.
另外一个区别(通常)是,pVm可以分配(可以用作赋值运算符的LHS),但&(*pVm)不能.
是
&(*pVm)相当于pVm?
是。* 1
相同*(&pVm)。
(* 1)
由于*-operator( de-referencing)仅适用于指针,因此前一种构造仅对指针(或数组,将衰减到指向其第一个元素的指针)起作用。后者可以应用于任何类型的变量。:
| 归档时间: |
|
| 查看次数: |
723 次 |
| 最近记录: |