3

在以下代码中:

unsafe
{
    int m = 10;
    int n = 10;
    double*[] a = new double*[m];
    for (int i = 0; i < m; i++)
    {
        double* temp = stackalloc double[n];
        a[i] = temp;
    }
}

有什么办法可以去掉多余的变量temp

编码:

a[i] = stackalloc double[n];

有编译器错误:

严重性代码 描述 项目文件行抑制状态错误 CS8346 无法将“double”类型的 stackalloc 表达式转换为“double*”类型。

4

1 回答 1

2

是否必须stackalloc仅在定义指向它的指针的同一行中使用?

是的,根据 C# 语言规范,这是必需的。

具体来说,请参阅堆栈分配部分,其中将语法指定为:

local_variable_initializer_unsafe
    : stackalloc_initializer
    ;

stackalloc_initializer
    : 'stackalloc' unmanaged_type '[' expression ']'
    ;

如您所见,您必须使用local_variable_initializer_unsafewith stackalloc_initializer,这意味着您必须声明一个局部变量以使用stackalloc.

(从技术上讲,您可以在语句中添加任意数量的换行符,但我很确定这不是您要问的!)

于 2019-09-18T07:36:57.200 回答