• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

指针类型(C#编程指南)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

原文地址:https://msdn.microsoft.com/zh-cn/library/y31yhkeb.aspx

指针类型声明采用下列形式之一:

 
 
type* identifier;
void* identifier; //allowed but not recommended

以下任一类型均可为指针类型:

  • bool。

  • 枚举类型。

  • 任何指针类型。

  • 任何仅包含非托管类型字段的用户定义的结构类型。

但是,你可在不同的指针类型之间以及指针类型和整型之间进行转换。

例如:

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

垃圾回收器并不跟踪是否有任何类型的指针指向对象。

下面是指针类型声明的示例:

示例

说明

int* p

p 是指向整数的指针。

int** p

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

int*[] p

p 是指向整数的指针的一维数组。

char* p

p 是指向字符的指针。

void* p

p 是指向未知类型的指针。

例如,请考虑以下声明:

 
 
int* myVariable;

myVariable 中包含的地址处找到的 int 变量。

指针转换(C# 编程指南)包含了多个指针示例。下面的示例显示需要 unsafe 关键字和 fixed 语句以及如何递增内部指针。你可将此代码粘贴到控制台应用程序的 Main 函数中来运行它。(记住在“项目设计器”中启用不安全代码;选择菜单栏上的“项目”“属性”,然后选择“生成”选项卡中的“允许不安全代码”。)

 
 
// Normal pointer to an object.
int[] a = new int[5] {10, 20, 30, 40, 50};
// Must be in unsafe code to use interior pointers.
unsafe
{
    // Must pin object on heap so that it doesn't move while using interior pointers.
    fixed (int* p = &a[0])
    {
        // p is pinned as well as object, so create another pointer to show incrementing it.
        int* p2 = p;
        Console.WriteLine(*p2);
        // Incrementing p2 bumps the pointer by four bytes due to its type ...
        p2 += 1;
        Console.WriteLine(*p2);
        p2 += 1;
        Console.WriteLine(*p2);
        Console.WriteLine("--------");
        Console.WriteLine(*p);
        // Deferencing p and incrementing changes the value of a[0] ...
        *p += 1;
        Console.WriteLine(*p);
        *p += 1;
        Console.WriteLine(*p);
    }
}

Console.WriteLine("--------");
Console.WriteLine(a[0]);
Console.ReadLine();

// Output:
//10
//20
//30
//--------
//10
//11
//12
//--------
//12

但是,你可以使用强制转换将 void 指针转换为任何其他指针类型,反之亦然。

将间接寻址运算符应用于 null 指针将导致由实现定义的行为。

如果已在固定块中设置指针,则它指向的变量不再是固定的。

下表列出了可在不安全的上下文中对指针执行的运算符和语句:

运算符/语句

用法

*

执行指针间接寻址。

->

通过指针访问结构的成员。

[]

为指针建立索引。

&

获取变量的地址。

++ 和 --

递增和递减指针。

+ 和 -

执行指针算法。

==、!=、<、>、<= 和 >=

比较指针。

stackalloc

在堆栈上分配内存。

fixed 语句

临时固定变量以便找到其地址。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap