如何将int指针传递给参数类型为int []的函数? 我需要从下面代码传递指针数据:如何将int *传递给参数类型为int []的函数?
char* data = stackalloc char[123];
与INT []的参数的函数。
foo(char [])
后续问题:
是如何INT []表示在C#中?是它等同于C++(指针?)
如何将int指针传递给参数类型为int []的函数? 我需要从下面代码传递指针数据:如何将int *传递给参数类型为int []的函数?
char* data = stackalloc char[123];
与INT []的参数的函数。
foo(char [])
后续问题:
是如何INT []表示在C#中?是它等同于C++(指针?)
阅读本:https://msdn.microsoft.com/en-us/library/4d43ts61(v=vs.90).aspx
由于阵列是参考的类型,当你传递数组给一个函数,传递的引用(或指针),以阵列。
只需将它传递这样的:
int[] arr = {1, 2, 3};
foo(arr);
这就是你如何创建在C#中的字符数组:
char[] data = new char[123];
,除非你有一个很好的理由不要使用unsafe
代码。
在任何情况下,您只能使用和操纵unsafe
代码中的指针。您的Foo
方法接受int[]
,而不是int*
,而不是char*
,而不是void*
。 int[]
是安全且可验证的 - char*
不是。你根本不能传递一个指针,更不用说一个不同类型的指针。
我假设你对C#的工作方式感到困惑,而你正试图用C#编写C代码。如果你想使用整数数组,使用整数数组。如果您想使用char数组,请使用char数组。
数组是C#中的一种实际类型,与C的语法糖不同 - 这意味着它们更易于使用,但这也意味着它们的行为与C非常不同。同样,您不应该真的除非需要,否则使用stackalloc
- 将内存管理留给运行时间,99%的时间。只有在您将此代码识别为瓶颈时才考虑这种黑客行为,即使如此,只有在性能改进(如果有)的情况下才值得。
所以,是的,使用数组是如此简单的C#:
var integerArray = new int[] { 1, 2, 3 };
var charArray = new char[] { 'a', 'b', 'c' };
MethodTakingIntArray(integerArray);
MethodTakingCharArray(charArray);
如果需要stackalloc
(同样,你真的不应该,大部分的时间),所有的处理该指针方法必须是unsafe
,他们必须采取指针参数:
private unsafe void HandleArray(int* array)
{
// Do whatever
}
原因很简单 - unsafe
号不是可验证运行时和指针不是数组。虽然你可以做integerArray.Length
,但指针上没有这样的东西(显然) - 它们是完全不同的类型。
另一个警告:char
与C/C++中的不同。如果你想要一个字节数组,使用byte[]
- char
实际上是一个unicode字符,不应该用于非字符数据。
所以我不能传递char *到char []在c#中? 我应该修改函数参数为char *? – vrnithinkumar
@vrnithinkumar是的,你不能。你为什么首先使用'char *'工作?在C#中使用指针的原因很少。 – Luaan
你使用C#吗?如果是这样,你想与C++代码进行互操作吗?因为你的问题不清楚。 –
对不起,我忘了提及的语言。它在C# – vrnithinkumar
'foo(int [])'也是一个C#函数吗? – phoog