代码之家  ›  专栏  ›  技术社区  ›  Dims

不能用大括号传递两次指针

  •  0
  • Dims  · 技术社区  · 5 年前

    我有一个功能

    void myfunction(A**);
    

    还有一个变量

    A a;
    

    我正在尝试创建一个数组,其中一个指针指向 a 内联

    myfunction( {&a} );
    

    A* . 如果我写信

    A *aa[] = {&a};
    myfunction( aa );
    

    那就行了。

    我能创造吗 A** 内联?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Vlad from Moscow    5 年前

    您不能像您所说的那样创建一个类型为A**的对象,因为表达式 {&a}

    其实和写的一样

    A **p = { &a };
    

    A * .

    在任何情况下,这样的初始化都是无效的。

    虽然需要中间变量,但不需要创建数组。

    你可以写

    A *p = &a;
    myfunction( &p );
    

    也许你应该考虑重新声明参数的可能性,比如 A * &

    你可以做一些类似于在C程序中做的事情。

    #include <stdio.h>
    
    typedef int A;
    
    void myfunction( A **p )
    {
        printf( "**p = %d\n", **p );
    }
    
    int main( void ) 
    {
        A x = 10;
    
        myfunction( ( int *[] ){ &x } );
    }
    

    程序输出是

    **p = 10
    
        2
  •  1
  •   Community CDub    5 年前

    我正在尝试创建一个指向内联的一个指针数组

    myfunction( {&a} );
    

    这行不通,因为 &a A* ,它与 A** ,并且这些类型不能相互转换。

    我可以创建**内联吗?

    是的,如果你有 A* 变量:

    A* pointer = &a;
    myfunction(&pointer);
    

    A a 直接。