我有一个函数f(unsigned char ** data);
。另外,我有一个指向具有pObj
成员的对象unsigned char* pbCert
的指针。因此,我想执行如下操作:
f(pObj->&pbCert);
不幸的是,我收到member identifier expected
错误。
我设法使用这种方法解决问题:
unsigned char* temp = pObj->pbCert;
f(&temp);
但是我很好奇,是否有一些聪明的记法技巧只在一行中做到这一点?
答案 0 :(得分:6)
&
位于整个成员访问表达式之前:f(&pObj->pbCert)
。
(事实上,您自己的unsigned char* temp
解决方案不完整!调用f(&temp)
会修改temp
,但不会修改pObj->pbCert
,除非您手动重新分配调用pObj->pbCert = temp;
后,f
将其显示。)
答案 1 :(得分:2)
你走了:
f(&(pObj->pbCert));
答案 2 :(得分:1)
首先,我们在这里有什么?指向对象pObj
的指针。
确定。然后我们想要访问pbCert
对象的成员。我们怎么做?
要访问对象的成员,我们可以使用点符号或箭头符号(如果我们有指向对象的指针)。
点符号
点表示法用于访问类的成员
object.member
或
(*object_pointer).member
因此,我们可以使用点符号访问pbCert
*pObj.pbCert
。
箭头符号
箭头表示法用于访问类的成员
object_pointer->member
注意我们不能使用带有箭头符号的object_name
来访问该成员。
因此,我们可以使用箭头符号访问pbCert
pObj->pbCert
。
现在我们接下来要做什么?我们希望将此成员的地址传递给函数f()
。
要获取变量的地址,我们使用&
运算符(运算符的地址)。所以我们有它。
pbCert
的地址可写为:
&((*pObj).pbCert)
(点符号)
&(pObj->pbCert)
(箭头符号)
注意 - 尽管我们可以使用arrow notation
访问该成员,但只要我们object pointer
,就可以使用dot notation
来访问该成员。
所以正确的方法是:
f(&((*pObj).pbCert));
或
f(&(pObj->pbCert));