C /CLI思辨录之内部指针的两面性
2008-02-23 05:05:30来源:互联网 阅读 ()
using namespace System; int _tmain() { int ^ hnd = gcnew int(100); int* np = &hnd; // Genarates a compile error } |
但是本地指针还是很有用的,如在使用指针算术和指针比较时就有许多的长处。所以新的C CLI允许您使用一个内部指针实现同样的功能。内部指针是本地指针的一个超集。所以他能够做任何内部指针所能做的一切。 但是当垃圾收集器移动指针所指向的对象时,内部指针也帮助程式实现其指向的地址的更新。
现在让我们看一下如何用内部指针来实现指针算术运算。
#include "stdafx.h" #include <stdio.h> using namespace System; using namespace stdcli::language; int _tmain() { const int SIZE = 10; array<int>^ arr = gcnew array<int>(SIZE); for(int idx = 0; idx < SIZE; idx ) { arr[idx] = idx 1; } // 取得指向数组第一个元素的指针 interior_ptr p = &arr[0]; // 通过增加指针值读取并输出数组元素 for(int idx = 0; idx < 10; idx ) { printf("Value of the element at %Xh ", p); Console::WriteLine(" is {0}",*(p )); } Console::ReadLine(); } |
不管垃圾收集器执行多少次和数组元素移动多少次,上面的代码仍然能工作良好。于是C 的力量又回到了.Net运行时刻库上。但是要小心使用内部指针。这些指针和本地指针很相似,当试图存取不允许操作的内存区段时能给程式造成危害。例如,假如我在上面的代码中试图存取下一个p ,他将返回恰好在上面数组元素上方4字节的内存段位置。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: C /CLI思辨录之代理构造函数
下一篇: C /CLI思辨录之再谈继承
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash