我有一个结构变量
struct Var var;
和来自库的函数
void func(struct Var ** ){}
现在我想调用这个函数 我可以用
吗? func(&&var);
如果是这样,有什么需要谨慎的吗?
如果没有,任何解决方案?
谢谢!
答案 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)
传递参数作为双指针通常用于获取传递指针的新地址。在你的情况下,你传递静态变量的地址,所以它的地址不会改变