大括号不能两次通过指针

时间:2019-07-17 12:35:08

标签: c++ arrays c++11 pointers

我有一个功能

void myfunction(A**);

和一个变量

A a;

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

myfunction( {&a} );

失败。它说我正在通过A*。如果我写

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

然后它起作用。

我可以内联创建A**吗?

2 个答案:

答案 0 :(得分:1)

您无法创建内联类型为A **的对象,因为表达式 <mat-form-field style="width: 100%;"> <label> <input matInput placeholder="{{ getTranslateKey('startingRange.label') | translate }}" value="" formControlName="startingRange"> </label> <mat-error *ngIf="ranges.get('startingRange').invalid"> <p>IP address is not valid.</p> </mat-error> </mat-form-field> 不是数组。

实际上与写相同

{&a}

根据C ++发行版,右侧表达式被视为initializer_list或类型为A **p = { &a }; 的对象。

无论如何这种初始化都是无效的。

尽管需要一个中间变量,但您不必创建数组。

你可以写

A *

也许您应该考虑重新声明A *p = &a; myfunction( &p ); 之类的参数。

您可以执行与C程序中类似的操作。

这是一个演示程序

A * &

程序输出为

#include <stdio.h>

typedef int A;

void myfunction( A **p )
{
    printf( "**p = %d\n", **p );
}

int main( void ) 
{
    A x = 10;

    myfunction( ( int *[] ){ &x } );
}

答案 1 :(得分:1)

  

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

myfunction( {&a} );

这不起作用,因为&aA*,它与A**是不同的类型,并且这些类型不能相互转换。

  

我可以内联创建A **吗?

是的,如果您有一个A*变量:

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

但不是直接来自A a