如何在C#中声明一个空指针?

7
在C#中,我们如何声明一个void指针?
3个回答

15

void* identifier;

但它需要在unsafe中使用:

unsafe
{
    void* identifier;
}

而且项目必须允许使用不安全的代码。


详细文档请参见:https://learn.microsoft.com/en-ca/dotnet/csharp/language-reference/unsafe-code#pointer-types同时,请阅读有关不安全代码的内容:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/unsafe-code以及垃圾回收如何工作,因为您在技术上绕过了它。在C#中非常少使用void指针或不安全代码。如果您在这里阅读本文并打算使用void指针将数据传递给方法,则是错误的做法。如果您想学习事物如何工作,那么很好! - Gavin Thornton

3

我猜你的意思是在托管代码中,因为你的问题比较简短,只能做出这样的假设。

我认为你要么需要使用 IntPtr,要么只需要任何 object 引用(它是基本类型,与空指针的基本等价 - 指向“某个东西”的引用)。除非你指的是 null 指针,在这种情况下,你需要使用 IntPtr.Zero


1

来自 http://msdn.microsoft.com/zh-cn/library/y31yhkeb%28VS.80%29.aspx

Visual Studio 2005其他版本中,不安全上下文中的类型可以是指针类型、值类型或引用类型。指针类型声明采用以下形式之一:
type* identifier; void* identifier; //允许但不推荐
以下任何类型都可以是指针类型:
sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal或bool。
任何枚举类型。
任何指针类型。
仅包含非托管类型字段的任何用户定义的结构类型。
指针类型不继承自object,指针类型和对象之间不存在转换。此外,装箱和拆箱不支持指针。但是,您可以在不同的指针类型之间以及指针类型和整数类型之间进行转换。
当您在同一声明中声明多个指针时,*仅写在基础类型旁边,而不是作为每个指针名称的前缀。例如:
int* p1, p2, p3; // 正确
int *p1, *p2, *p3; // C#中无效
指针不能指向引用或包含引用的结构,因为即使指针指向它,对象引用也可能被垃圾回收。GC不跟踪任何指针类型是否指向对象。
类型为myType*的指针变量的值是类型为myType的变量的地址。以下是指针类型声明的示例:
示例 描述
int* p p是指向整数的指针
int** p p是指向整数指针的指针
int*[] p p是指向整数指针的一维数组
char* p p是指向字符的指针
void* p p是指向未知类型的指针
指针间接操作符*可用于访问指针变量所指向位置的内容。例如,对于以下声明,
int* myVariable; //表达式*myVariable表示在myVariable中包含的地址中找到的int变量。
不能将间接操作符应用于void*类型的指针。但是,您可以使用强制转换将void指针转换为任何其他指针类型,反之亦然。
指针可以为null。将间接操作符应用于null指针会导致实现定义的行为。
请注意,方法之间传递指针可能会导致未定义的行为。例如,通过Out或Ref参数或作为函数结果返回指向局部变量的指针。如果指针在固定块中设置,则它所指向的变量可能不再被固定。
以下表列出了在不安全上下文中可以操作指针的运算符和语句:
运算符/语句 用途
* 执行指针间接。
-> 通过指针访问结构的成员。
[] 对指针进行索引。
& 获取变量的地址。
++和-- 递增和递减指针。
+和- 执行指针算术运算。
==、!=、<、>、<=和>= 比较指针。
stackalloc 在堆栈上分配内存。
fixed语句 临时固定变量,以便找到其地址。
有关更多信息,请参阅C#语言规范中的以下部分:
18不安全代码

您提供的链接已经不再指向原始页面,它已被存档在这里 https://web.archive.org/web/20140911014448/http://msdn.microsoft.com/en-us/library/y31yhkeb(VS.80).aspx - Jfm Meyers
文档现在可在此处查看(2021):https://learn.microsoft.com/en-ca/dotnet/csharp/language-reference/unsafe-code#pointer-types - Gavin Thornton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接