如何在C语言中使用指向指针的结构体?

17

我希望能够修改双指针下的结构体成员。你知道该怎么做吗?

示例代码:

typedef struct {
    int member;
} Ttype;

void changeMember(Ttype **foo) {
   //I don`t know how to do it
   //maybe
   *foo->member = 1;
}
4个回答

32

试一试

(*foo)->member = 1;

你需要先显式使用 *,否则这将是对成员进行解引用的尝试。


一个疑问的例子:如果changeMember()函数被创建在一个类库中,而我需要在我的控制台应用程序中访问它,应该如何操作?@Jonathan Leffler - TechBrkTru
@TechBrkTru:鉴于这是C语言,我不确定你所说的“类库”是什么意思。但是,如果你的意思是“库”,那么你只需要确保有一个包含必要函数声明的头文件被用于调用changeMember()的代码中,并且将可执行文件与包含该函数的库链接即可。这完全是例行公事。如果你的意思是其他的东西,你应该自己提出一个新问题,以便你可以适当地解释清楚。 - Jonathan Leffler
@JaredPar 为什么我们需要一个指向结构体指针的指针才能改变结构体的成员(难道一个指针不足以做到这一点吗?) - Bionix1441

10
由于运算符优先级,您需要在此处使用括号:

由于运算符优先级,您需要在此处使用括号:

(*foo)->member = 1;

2
您可以使用一个临时变量来提高可读性。例如:
Ttype *temp = *foo;
temp->member = 1;

如果您有控制权并允许使用C++,更好的方法是使用引用。例如:

void changeMember(Ttype *&foo) {
   foo->member = 1;
}

1

如果它是动态分配的,那么 (*foo)->member = 1 可能成立。


不客气 - 但动态分配是无关紧要的。 - Jonathan Leffler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接