指向结构字段指针的指针

时间:2015-01-09 16:22:51

标签: c pointers struct

我有:

typedef struct
{
    int id;
    Other_Struct *ptr;
} My_Struct;

假设我的指针abcd的类型为My_Struct

我如何获得以下地址:

abcd->ptr  

我的意思是ptr本身的地址(比如指针指针),而不是ptr中存储的地址。

4 个答案:

答案 0 :(得分:4)

只需使用运营商的&地址,就像这样

Other_Struct **ptrptr = &(abcd->ptr);

答案 1 :(得分:3)

这个怎么样:

&(abcd->ptr)

答案 2 :(得分:2)

如果我理解正确,在这种情况下你有My_Struct *abcd指向一个地址,你想要的是这个结构中一个字段的地址(如果这个字段是指针则无关紧要或不)。该字段为abcd->ptr,因此您需要的地址为&abcd->ptr

您可以通过打印实际指针值来轻松检查这一点(地址之间的差异应该会在ptr内为您提供My_Struct的偏移量):

struct My_Struct {
    int id;
    void *ptr;
};

main()
{
    struct My_Struct *abcd;
    printf("%p %p\n", abcd, &abcd->ptr);
}

更新:如果您希望您的代码具有可移植性,符合标准以及过去和将来的证据,您可能需要向void *添加强制转换为printf()参数,根据@alk的评论如下。为了正确起见,您还可以使用标准入口点原型(int main(void)int main(int argc, char **argv)),当然也可以使用stdio.h来使用printf()

答案 3 :(得分:1)

最明确的做法是:

My_Struct *abcd;
Other_Struct **pptr;
pptr = &(abcd->ptr);

我不知道括号是否真的有必要,我也不在乎,因为无论如何它都更具可读性。