C#基础指针类型
在C#的不安全的代码书写中,类型可以是指针类型、值类型或引用类型。 指针类型声明具有下列形式之一:
type* identifier;
void* identifier; //allowed but not recommended
下列类型都可以是指针类型:
sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal 或 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 是指向整数的指针的指针 |
|
int*[] p |
p 是指向整数的指针的一维数组 |
|
char* p |
p 是指向字符的指针 |
|
void* p |
p 是指向未知类型的指针 |
指针间接寻址运算符 * 可用于访问位于指针变量所指向的位置的内容。 例如,请考虑下面的声明:
int* myVariable;
表达式 *myVariable 表示在 myVariable 中包含的地址处找到的 int 变量。
不能对 void* 类型的指针应用间接寻址运算符。 但是,可以使用强制转换将 void 指针转换为其他指针类型,反之亦然。
指针可以为 null。 如果将间接寻址运算符应用于 null 指针,则会导致由实现定义的行为。
注意,在方法之间传递指针会导致未定义的行为。 示例通过 Out 或 Ref 参数或作为函数结果返回一个指向局部变量的指针。 如果将指针设置在固定的块中,它所指向的变量可能不再是固定的。
下表列出可在不安全的上下文中针对指针执行的运算符和语句:
|
运算符/语句 |
使用 |
|---|---|
|
* |
执行指针间接寻址。 |
|
-> |
通过指针访问结构的成员。 |
|
[] |
为指针建立索引。 |
|
& |
获取变量的地址。 |
|
++ 和 -- |
递增和递减指针。 |
|
加、减 |
执行指针算法。 |
|
==、!=、<、>、<= 和 >= |
比较指针。 |
|
stackalloc |
在堆栈上分配内存。 |
|
fixed 语句 |
临时固定变量以便可以找到其地址。 |
C#基础指针类型的更多相关文章
- 《精通C#》自定义类型转化-扩展方法-匿名类型-指针类型(11.3-11.6)
1.类型转化在C#中有很多,常用的是int类型转string等,这些都有微软给我们定义好的,我们需要的时候直接调用就是了,这是值类型中的转化,有时候我们还会需要类类型(包括结构struct)的转化,还 ...
- 指针类型(C# 编程指南)
原文地址:https://msdn.microsoft.com/zh-cn/library/y31yhkeb.aspx 在不安全的上下文中,类型可以是指针类型.值类型或引用类型. 指针类型声明采用下列 ...
- [CLR via C#]4. 类型基础及类型、对象、栈和堆运行时的相互联系
原文:[CLR via C#]4. 类型基础及类型.对象.栈和堆运行时的相互联系 CLR要求所有类型最终都要从System.Object派生.也就是所,下面的两个定义是完全相同的, //隐式派生自Sy ...
- [No0000B9]C# 类型基础 值类型和引用类型 及其 对象复制 浅度复制vs深度复制 深入研究2
接上[No0000B5]C# 类型基础 值类型和引用类型 及其 对象判等 深入研究1 对象复制 有的时候,创建一个对象可能会非常耗时,比如对象需要从远程数据库中获取数据来填充,又或者创建对象需要读取硬 ...
- [No0000B5]C# 类型基础 值类型和引用类型 及其 对象判等 深入研究1
引言 本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone其实也就是对象复制.复制又分为了浅度复 ...
- C++类指针类型的成员变量的浅复制与深复制
本篇文章旨在阐述C++类的构造,拷贝构造,析构机制,以及指针成员变量指针悬空问题的解决.需要读者有较好的C++基础,熟悉引用,const的相关知识. 引言: 类作为C++语言的一种数据类型,是对C语言 ...
- python基础——重访类型分类
python基础--重访类型分类 对象根据分类来共享操作:例如,字符串.列表和元组都共享诸如合并.长度和索引等序列操作. 只有可变对象(列表.字典和集合)可以原处修改:我们不能原处修改数字,字符串.元 ...
- 不同平台下int类型、指针类型的数据大小
不同平台下int类型.指针类型的数据大小 对于int类型数据和指针类型数据的大小,是非常基础的问题. 在一个具体的平台上,确定他们最好的办法就是使用sizeof(type)对其进行判断,返回当前数据类 ...
- Qt中容器类应该如何存储对象(最好使用对象指针类型,如:QList<TestObj*>,而不要使用 QList<TestObj> 这样的定义,建议采用 智能指针QSharedPointer)
Qt提供了丰富的容器类型,如:QList.QVector.QMap等等.详细的使用方法可以参考官方文档,网上也有很多示例文章,不过大部分文章的举例都是使用基础类型:如int.QString等.如果我们 ...
随机推荐
- Facebook 内部高效工作PPT
Facebook 内部分享:不论你如何富有,你都赚不到更多的时间,你也回不到过去.没有那么多的假如,只有指针滴答的时光飞逝和你应该好好把握的现在,以下26张PPT的分享将为您带来时间价值管理的技巧. ...
- js中文正则
正则表达式用于字符串处理.表单验证等场合,实用高效.现将一些常用的表达式收集于此,以备不时之需. 匹配中文字符的正则表达式: [\u4e00-\u9fa5]评注:匹配中文还真是个头疼的事,有了这个表达 ...
- Redis的简单介绍及在Windows下环境搭建
简单介绍 1,Redis是什么 最直接的还是看官方的定义吧. Redis is an open source (BSD licensed), in-memory data structure stor ...
- Internet Explorer已限制此网页运行可以访问计算机的脚本或ActiveX控件
在制作网页的时候,大家不免要用到script,也即是脚本,主要是VBScript以及JavaScript.那么时常遇到这样的情况: 在本地双击打开html文件时,如果是IE的话,会出现提示框(如下图) ...
- 谈谈CSS的布局,display、position、float
前言 前端一直是我的一个很大的缺憾,这段时间痛顶思痛,决定好好的把前台的东西加强,这不,在学习了一段时间js之后,在做一些小练习,却发现最基本的一些css知识却还不了解,所以便有了这篇博文. 块级元素 ...
- mysql数据库 安装 (原创)
1.首先下载mysql 数据库,我安装的是mysql5.1版本,直接安装就行,但是如果以后你想在数据库里显示中文的话,要把字符集设置为gb2312 2.配置数据源odbc. mysql-connec ...
- iOS - CADisplayLink与NSTimer
一.CADisplayLink简介 CADisplayLink 是一个定时器对象可以让你的应用以与显示器的刷新界面相同的频率进行绘图. 应用如果想要创建 display link ,需要提供一个目标对 ...
- yeild
正在使用cpu的线程,退出,返回等待池,其他优先级相同的线程竞争上岗.
- alpha,hidden,opaque的一些认识
如果opaque设置为YES,那么视图会被当做全视图来对待,系统会重绘整个视图 如果opaque设置为NO,那么系统会减少开销,以其中的内容来判定重绘的视图 如果把视图的背景色设置为透明那个,那么op ...
- Ubuntu 14.10 下sort,uniq,cut,wc命令详解
sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...