C# 是否必须仅在定义指向它的指针的同一行中使用'stackalloc'?
在以下代码中:C# 是否必须仅在定义指向它的指针的同一行中使用'stackalloc'?,c#,pointers,unsafe,stackalloc,C#,Pointers,Unsafe,Stackalloc,在以下代码中: 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; } } 存在编译器错误: 严重性代码说明项目文件行抑制状态 错误CS8346将类型为“double”的stac
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;
}
}
存在编译器错误:
严重性代码说明项目文件行抑制状态
错误CS8346将类型为“double”的stackalloc表达式转换为
不可能输入“double*”
是否需要仅在定义指向它的指针的同一行中使用stackalloc
是的,这是必要的
具体而言,请参见堆栈分配部分,该部分将语法指定为:
local_variable_initializer_unsafe
: stackalloc_initializer
;
stackalloc_initializer
: 'stackalloc' unmanaged_type '[' expression ']'
;
如您所见,您必须将local\u variable\u initializer\u unsafe
与stackalloc\u initializer
一起使用,这意味着您必须声明一个局部变量,以使用stackalloc
的结果进行初始化
(从技术上讲,你可以在语句中添加任意多的换行符,但我很确定这不是你想要的!)你能说说它是如何失败的吗?@John it得到了一个编译器错误。这将是在你的问题中编辑的有用信息-请这样做并提供确切的错误消息。在使用
stackalloc
时,.net人建议使用Span
。当a的类型为Span[]
@nano时,我希望您能够分配a[I]=stackalloc…
。@nano是的,如果有人在标题和正文中提出了不同的问题,我通常会根据标题回答,因为人们通常会在搜索时首先看到这个问题。
local_variable_initializer_unsafe
: stackalloc_initializer
;
stackalloc_initializer
: 'stackalloc' unmanaged_type '[' expression ']'
;