Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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# 如何将int*传递给具有int[]类型参数的函数?_C#_Pointers - Fatal编程技术网

C# 如何将int*传递给具有int[]类型参数的函数?

C# 如何将int*传递给具有int[]类型参数的函数?,c#,pointers,C#,Pointers,如何将int指针传递给具有int[]类型参数的函数? 我需要从以下代码传递指针数据: char* data = stackalloc char[123]; 指向参数为int[]的函数 foo(char []) 跟进问题: int[]如何用C#表示?是否与C++(指针?) 相同: 因为数组是引用类型,所以当您将数组传递给函数时,您将传递一个指向该数组的引用(或指针) 您可以这样简单地传递它: int[] arr = {1, 2, 3}; foo(arr); 这就是在C#中创建字符数组的方法:

如何将int指针传递给具有int[]类型参数的函数? 我需要从以下代码传递指针数据:

char* data = stackalloc char[123];
指向参数为int[]的函数

foo(char [])
跟进问题:

int[]如何用C#表示?是否与C++(指针?)

相同: 因为数组是引用类型,所以当您将数组传递给函数时,您将传递一个指向该数组的引用(或指针)

您可以这样简单地传递它:

int[] arr = {1, 2, 3};
foo(arr);
这就是在C#中创建字符数组的方法:


除非有充分的理由,否则不要使用不安全的代码

在任何情况下,您只能在
safe
code中使用和操作指针。您的
Foo
方法接受
int[]
,不接受
int*
,不接受
char*
,不接受
void*
int[]
是安全且可验证的-
char*
不是。您根本无法传递指针,更不用说不同类型的指针了

我想你只是对C语言的工作原理感到困惑,你正试图用C语言编写C代码。如果要使用整数数组,请使用整数数组。如果要使用字符数组,请使用字符数组

数组是C#中的一种实际类型,与C的语法糖不同——这意味着它们更容易使用,但也意味着它们的行为与C非常不同。同样,除非必要,否则不应该真正使用
stackalloc
——将内存管理留给运行时,99%的时间都是这样。只有当您将此代码确定为瓶颈时,才考虑这样的黑客行为,即使如此,也只有在性能改进(如果有)值得的情况下

是的,在C#中使用数组就像这样简单:

如果您需要
stackalloc
(同样,在大多数情况下,您确实不应该这样做),那么处理该指针的所有方法都必须是
不安全的
,并且它们必须采用指针参数:

private unsafe void HandleArray(int* array)
{
  // Do whatever
}
原因很简单-
不安全
运行时无法验证代码,指针也不是数组。虽然您可以执行
integerArray.Length
,但指针上没有这样的操作(显然)-它们是完全不同的类型


另一个警告:
char
与C/C++中的不同。如果需要字节数组,请使用
byte[]
-
char
实际上是一个unicode字符,不应用于非字符数据。

是否使用C#?如果是这样,您是否试图与C++代码进行互操作?因为你的问题不清楚。对不起,我忘了提语言了。它在C#中是
foo(int[])
也是一个C#函数?但是你使用的是char*而不是int?对不起,我的错。那只是炭。foo(char[])是一个C#函数,所以我不能在C#中将char*传递给char[]?我应该将函数参数修改为char*?@vrnithinkumar是的,您不能。首先,您为什么要使用
char*
?很少有理由在C#中使用指针。
var integerArray = new int[] { 1, 2, 3 };
var charArray = new char[] { 'a', 'b', 'c' };

MethodTakingIntArray(integerArray);
MethodTakingCharArray(charArray);
private unsafe void HandleArray(int* array)
{
  // Do whatever
}