如何將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