在下面的代码中:
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 *”。
最佳答案
是否仅在定义指针的同一行中使用stackalloc
?
是的,这是必需的according to the C# language specification。
具体来说,请参见“堆栈分配”部分,该部分将语法指定为:
local_variable_initializer_unsafe
: stackalloc_initializer
;
stackalloc_initializer
: 'stackalloc' unmanaged_type '[' expression ']'
;
如您所见,必须将
local_variable_initializer_unsafe
与stackalloc_initializer
一起使用,这意味着必须声明一个局部变量才能使用stackalloc
的结果进行初始化。(从技术上讲,您可以根据需要在语句中放入尽可能多的换行符,但是我敢肯定这不是您要的!)