日期:2014-05-17  浏览次数:20802 次

【笔试&面试】C#中的指针

在不安全的上下文中,类型可以是指针类型、值类型或引用类型。 指针类型声明具有下列形式之一:

type* identifier;

void* identifier; //allowed but not recommended

下列类型都可以是指针类型:

  • sbytebyteshortushortintuintlongulongcharfloatdoubledecimal 或 bool
  • 任何枚举类型。
  • 任何指针类型。
  • 仅包含非托管类型的字段的任何用户定义的结构类型。

指针类型不继承 object,并且指针类型与 object 之间不存在转换。 此外,装箱和取消装箱不支持指针。 但是,允许在不同指针类型之间以及指针类型与整型之间进行转换。

当在同一个声明中声明多个指针时,* 仅与基础类型一起使用,而不是作为每个指针名称的前缀。 例如:

int* p1, p2, p3;   // Ok

int *p1, *p2, *p3;   //Invalid in C#

指针不能指向引用或包含引用的struct,因为即使有指针指向对象引用,该对象引用也无法执行垃圾回收。 GC 并不注意是否有任何类型的指针指向对象。

myType* 类型的指针变量的值是 myType 类型的变量的地址。 下面是指针类型声明的示例:

示例

说明

int* p

p 是指向整数的指针

int** p

p 是指向整数的指针的指针