如何在`C中获取对象指针的指针`

如何在`C中获取对象指针的指针`,c,pointers,C,Pointers,我有一个结构变量 struct Var var; 和一个来自库的函数 void func(struct Var ** ){} 现在我想调用这个函数 我能用吗 func(&&var); 如果是,有什么需要谨慎的吗? 若否,有何解决方法? 谢谢 您可以通过以下声明使用此选项: struct Var *var; func(&var); 情境:在这些例子中,您在一个函数中声明指针变量,并在func()中分配内存,一个带有T**类型参数的

我有一个结构变量

      struct Var var;
和一个来自库的函数

      void func(struct Var ** ){}
现在我想调用这个函数 我能用吗

      func(&&var);
如果是,有什么需要谨慎的吗? 若否,有何解决方法?


谢谢

您可以通过以下声明使用此选项:

struct Var *var;
func(&var);

情境:在这些例子中,您在一个函数中声明指针变量,并在
func()

中分配
内存,一个带有
T**
类型参数的函数可能会将指针重新分配到不同的值。这意味着必须传入
T*
的地址:

struct Var* var;
func(&var);

void func(struct Var ** a_var)
{
    *a_var = malloc(sizeof(struct Var));
}

作为双指针传递参数通常用于为传递的指针获取新地址。在您的例子中,您传递的是静态变量的地址,因此它的地址不会改变

&
运算符获取表达式的地址,该地址必须是左值(即可以出现在赋值的左侧)。
&var
表达式不能出现在赋值的左侧,因此不允许在
&(&var)
中使用
&var
地址

为了传递地址的地址,您需要首先创建一个指针变量,为该指针分配一个对象的地址,然后传递一个指针的地址,如下所示:

struct Var myVar; // Initialize myVar
struct Var *ptr = &myVar; // First level of indirection - pointer to struct
func(&ptr); // Second level of indirection - pointer to a pointer

在这种特殊情况下,没有必要小心谨慎,因为函数什么都不做:)您能告诉我们将静态变量作为双指针传递的原因吗。因为那没有意义是的,你必须这样做。询问该函数为什么接受指向指针的指针…它是否与指向已分配结构的临时指针一起工作?这有意义吗?将参数作为双指针传递通常用于为传递的指针获取新地址。在您的例子中,您传递的是静态变量的地址,所以它的地址不会changed@user1944267我无法确认是否正确,或者在哪些情况下正确,但我认为使用它没有任何意义