回答
這是pointer to an int
的經典C符號。只要類型後跟*
,就表示該類型爲該類型的pointer。在C#中,與C不同,除了在項目屬性中啓用unsafe代碼之外,還必須明確定義函數爲unsafe
以使用指針。指針類型也不能直接與具體類型互換,因此必須先引用類型的引用。要在C#中獲得指向另一種類型(例如int)的指針(或針對該問題的C & C++),必須在變量的前面使用取消引用運算符&
(與號),以獲得指向的變量:
unsafe
{
int i = 5;
int* p = &i;
// Invoke with pointer to i
Method(p);
}
「不安全」的代碼C#
下面是不安全的代碼的一些關鍵文章,並在C#中使用指針。
這是一個pointer to an int。通常最好在託管代碼中避免。您可能想要發佈您的導入方法聲明。一個IntPtr通常足夠用於這種互操作。
這只是一個通過引用傳遞的參數。這是由P/Invoke編組提供的良好支持,使用IntPtr是一個錯誤。 – 2010-07-13 15:40:42
取決於它的功能。如果它是一個數組,'int []'就是你想要的。如果是句柄,'IntPtr'通常是最好的,特別是當你計劃傳遞0時。如果你想實際引用一個int,'ref int'或'out int'可能會更好。 – Blindy 2010-07-13 16:01:47
如果沒有看到方法聲明,我就無法猜測其中一種方法(ref和數組vs指針)。 @Bindind對這些錢是正確的。取決於所調用的方法。例如,SendMessage的LPARAM通常編組爲IntPtr,並且該傢伙通常擁有一個內存指針(可以表示爲int *) – dkackman 2010-07-13 16:16:09
這取決於您使用的語言。在C#中,您應該使用「ref」關鍵字聲明參數。在VB.NET中,你應該使用ByRef關鍵字。你需要通過傳遞一個變量來調用它,而不是一個常量。類似這樣的:
int retval = 0;
Method(ref retval);
// Do something with retval
//...
參考文獻實際上與接受的答案中使用的相同嗎? – 2014-09-04 11:11:06
抖動完成後的引擎蓋下,是的。 – 2014-09-04 11:44:12
如果他使用的DLL的作者決定了C#簽名'Method(int * p)',那麼他不能用方法'Method(ref retval)'調用該方法;'你建議,對吧? DLL的作者_could_選擇了一個簽名'Method(ref int p)',但由於某種原因,他們沒有。 C#沒有爲'ref int'類型的變量提供「算術」,例如增加到「下一個」地址,它對指針「int * p」的處理方式(如C#'p ++'等等,「不安全」)。 。 – 2017-07-03 10:50:46
- 1. 什麼是(int - > int) - >(int - > int)是什麼意思?
- 2. 克++ __static_initialization_and_destruction_0(INT,INT) - 什麼是
- 3. 什麼是INT 21h?
- 4. 是什麼(INT - > INT)是什麼意思?
- 5. Easymock.and(int,int)的用法是什麼?
- 6. int(* ret)()=(int(*)())代碼是什麼意思?
- 7. 這是什麼addSelectionInterval(int index0,int index1)?
- 8. 「int k =((int)i)」是做什麼的?
- 9. int test [] = new int [0]是什麼意思?
- 10. 'void(* old_sigint_handler)(int)'是什麼?
- 11. 什麼是List [String〜Int]?
- 12. 什麼是C#中的int?
- 13. 什麼是stdin的int宏?
- 14. 它是什麼:int(* z())[5];
- 15. int values []是什麼意思?
- 16. 是什麼(雙(^)(INT))foofoo
- 17. int A [] = {}是什麼意思?
- 18. 什麼是(int)用於?
- 19. 爲什麼1e400不是int?
- 20. int *在這裏是什麼?
- 21. int *是什麼。語法呢?
- 22. * int是什麼意思?
- 23. Java中的++ int是什麼?
- 24. 什麼是A <int(int)>是什麼意思?這個技術的名字是什麼?
- 25. 爲什麼DateTime.Now.Year是int而不是ushort
- 26. 是什麼讓Swift認爲[String]是Int?
- 27. 爲什麼int * []衰減爲int **而不是int [] []?
- 28. split(String,int)(int),最後(int)的意思是什麼?
- 29. 什麼是C「INT常量*」的確切含義是什麼?
- 30. (char pointer和int added)和循環是什麼?什麼是c?
要在此處添加,「&」將獲得「int i」的指針(地址) ... – Nate 2010-07-13 15:11:12
@Nate:好的一點,我會添加一個解引用運算符的更好的解釋。 – jrista 2010-07-13 15:57:24
在這裏相同的評論:它與不安全的代碼無關。參數只是通過引用傳遞。 C#中的「ref」關鍵字。它是C#中的一個指針,並且在JIT編譯器完成時也是如此。 – 2010-07-15 12:24:00