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

时间:2013-04-18 10:12:24

标签: c pointers

我有一个结构变量

      struct Var var;

和来自库的函数

      void func(struct Var ** ){}

现在我想调用这个函数 我可以用

吗?
      func(&&var);
如果是这样,有什么需要谨慎的吗? 如果没有,任何解决方案?

谢谢!

4 个答案:

答案 0 :(得分:5)

具有类型T**的参数的函数可能会将指针重新分配给不同的值。这意味着必须传递T*的地址:

struct Var* var;
func(&var);

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

答案 1 :(得分:2)

您可以通过以下声明来使用它:

struct Var *var;
func(&var);

情况:在这些例子中,你在一个函数中声明指针变量,在allocate中声明func()内存

答案 2 :(得分:2)

&运算符采用表达式的地址,该表达式必须是左值(即可以出现在赋值左侧的内容)。 &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

答案 3 :(得分:0)

传递参数作为双指针通常用于获取传递指针的新地址。在你的情况下,你传递静态变量的地址,所以它的地址不会改变