用指针定义静态数组的编译错误

Compilation error for defining static array with pointers

当我定义一个数组时

double *first = (double *)malloc( N*N*sizeof( double ) );

没有问题。但是当我指定

static double *first = (double *)malloc( N*N*sizeof( double ) );

我收到这个错误

error: initializer element is not constant
   10 |     static double *first = (double *)malloc( N*N*sizeof( double ) );
      |                            ^

我该如何解决?

您可以使用常量表达式初始化具有静态存储持续时间的对象。并且调用 malloc 的表达式不是常量表达式。

因此您需要将指针初始化为空指针,例如

static double *first = NULL;

然后在函数中调用函数malloc

if ( first == NULL ) first = (double *)malloc( N*N*sizeof( double ) );