回答
这是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 k =((int)i)”是做什么的?
- 7. int test [] = new int [0]是什么意思?
- 8. 什么是C#中的int?
- 9. int *在这里是什么?
- 10. int values []是什么意思?
- 11. int A [] = {}是什么意思?
- 12. 什么是List [String〜Int]?
- 13. 是什么(双(^)(INT))foofoo
- 14. Java中的++ int是什么?
- 15. 什么是A <int(int)>是什么意思?这个技术的名字是什么?
- 16. 是什么让Swift认为[String]是Int?
- 17. split(String,int)(int),最后(int)的意思是什么?
- 18. 什么是C“INT常量*”的确切含义是什么?
- 19. (char pointer和int added)和循环是什么?什么是c?
- 20. 这是什么意思? int foo = foo + 4;
- 21. org.osgi.framework.Bundle.stop(int)的可用选项是什么?
- 22. Android什么是ExpandableListView中的“int groupPosition”?
- 23. 为什么'\\'被认为是int?
- 24. 什么是“int?”在C#类型中
- 25. string = string + int:背后是什么?
- 26. 什么是 “int *(* PFP)();”在C做?
- 27. int max =〜0;这是什么意思?
- 28. 什么是“运算符int”函数?
- 29. int x; arr [100]是什么意思?
- 30. 什么类型是auto&x = const int *?
要在此处添加,“&”将获得“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