在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
原文地址:https://msdn.microsoft.com/zh-cn/library/y31yhkeb.aspx 指针类型声明采用下列形式之一: type* identifier; void* identifier; //allowed but not recommended 以下任一类型均可为指针类型:
但是,你可在不同的指针类型之间以及指针类型和整型之间进行转换。 例如: int* p1, p2, p3; // Ok int *p1, *p2, *p3; // Invalid in C# 垃圾回收器并不跟踪是否有任何类型的指针指向对象。 下面是指针类型声明的示例:
例如,请考虑以下声明: 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 指针将导致由实现定义的行为。 如果已在固定块中设置指针,则它指向的变量不再是固定的。 下表列出了可在不安全的上下文中对指针执行的运算符和语句:
|
请发表评论