Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否必须仅在定义指向它的指针的同一行中使用'stackalloc'?_C#_Pointers_Unsafe_Stackalloc - Fatal编程技术网

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 ']'
    ;