指向成员属性的指针

时间:2016-01-08 07:53:46

标签: c

我有一个函数f(unsigned char ** data);。另外,我有一个指向具有pObj成员的对象unsigned char* pbCert的指针。因此,我想执行如下操作:

f(pObj->&pbCert);

不幸的是,我收到member identifier expected错误。

我设法使用这种方法解决问题:

unsigned char* temp = pObj->pbCert;
f(&temp);

但是我很好奇,是否有一些聪明的记法技巧只在一行中做到这一点?

3 个答案:

答案 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对象的成员。我们怎么做? 要访问对象的成员,我们可以使用点符号箭头符号(如果我们有指向对象的指针)。

  1. 点符号
    点表示法用于访问类的成员

    object.member

    (*object_pointer).member

  2. 因此,我们可以使用点符号访问pbCert *pObj.pbCert

    1. 箭头符号
      箭头表示法用于访问类的成员

      object_pointer->member

    2. 注意我们不能使用带有箭头符号的object_name来访问该成员。

      因此,我们可以使用箭头符号访问pbCert pObj->pbCert

      现在我们接下来要做什么?我们希望将此成员的地址传递给函数f()

      要获取变量的地址,我们使用&运算符(运算符的地址)。所以我们有它。

      pbCert的地址可写为:

      1. &((*pObj).pbCert)(点符号)

      2. &(pObj->pbCert)(箭头符号)

      3. 注意 - 尽管我们可以使用arrow notation访问该成员,但只要我们object pointer,就可以使用dot notation来访问该成员。

        所以正确的方法是:

        f(&((*pObj).pbCert));

        f(&(pObj->pbCert));