详谈C#指针类型
2011-01-13 16:08
274 查看
操作c#中的指针,是一种编写非托管中的一种技术。 c#中指针类型可能是(存储在栈)中的值类型,也可能是(存储在堆)中的引用 类型。不过无论是什么类型,基本格式都有一个共同的要求就是必须都是支持非 托管的类型或者空类型。 (这里顺便提一句,非托管的类型编译依赖系统类型库,而托管的类型依赖CLR中元 数据.) 在C#中支持非托管的类型包括: sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal , bool ,enum ,pointer,void和 用户自定义的结构体类型(但需要注意这里结构体元素必须也是支持非托管的) 定义指针类型格式: 非托管类型* 名称; 例如:int* p; 这里需要注意指针类型是一种类型,声明和一般原C#托管类型一样. 所以可以支持int* p ,q,不支持int* p,*q表示方法. 1,指针类型做数组操作 C#非托管类型可以像C++一样在非托管堆上分配地址,使用stackalloc操作. 并且通过和C++一样的操作方式*用于取地址实际内容或者[]索引方式访问. 例如: static unsafe void Main() { //分配p1一个100的大小 int* p1 = stackalloc int[100]; //赋值操作 for (int i = 0; i < 100; i++) { p1[i] = i; } //测试内容 for (int i = 0; i < 100; i++) { Console.WriteLine(p1[i]); Console.WriteLine(*(p1+i)); } } 注意,这里Main函数需要声明是unsafe(非托管的代码) 2,用于获得对象地址 static unsafe void Main() { int i = 10; //声明一个int的存放地址 int* p = &i;//获得i存放的内存地址 Console.WriteLine(*p);//测试 } 除了上面提到的内容外,C#指针类型可以完成几乎所有C++指针可以实现的操作. |
相关文章推荐
- 详谈C#指针类型
- 读<<CLR via C#>>总结(6) 详谈实例构造器和类型构造器
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- C#学习笔记-索引器,指针类型,隐式类型,扩展方法,分部方法,匿名类型
- (转)C#中使用指针转换数据类型[C#/unsafe]
- C#中使用指针转换数据类型[C#/unsafe]
- C#中的IntPtr类型(指针等用)
- C#指针类型
- C#基础指针类型
- [C#]C#学习笔记-索引器,指针类型,隐式类型,扩展方法,分部方法,匿名类型
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- C#中使用指针转换数据类型[C#/unsafe]
- C# CLR via 对象内存中堆的存储【类型对象指针、同步块索引】
- C# string类型转换成 指针类型或者句柄
- C#中获取数组指针再将其转换成IntPtr类型
- c#调用Win32 API如何处理指针类型的参数
- C#调用Win32 API如何处理指针类型的参数
- C#调用C++ 平台调用P/Invoke 结构体--含有内置数据类型的一维、二维数组、字符串指针【六】
- C#中调用C++的dll的参数为指针类型的导出函数