【笔试&面试】C#中的指针
来源:互联网 发布:三星n9008刷4g网络 编辑:程序博客网 时间:2024/05/21 07:10
在不安全的上下文中,类型可以是指针类型、值类型或引用类型。 指针类型声明具有下列形式之一:
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 语句
临时固定变量以便可以找到其地址。
说明:以上内容是参见的微软的MSDN上C#编程指南,个人对C#的指针,也在慢慢的学习之中。
- 【笔试&面试】C#中的指针
- 【笔试&面试】C#中的程序集
- 【笔试&面试】C#中的命名空间
- 【笔试&面试】关于C#中的类型
- C#面试笔试题库
- C#面试笔试小贴士 1
- C#面试笔试小贴士 2
- c#面试,笔试题收集
- 某公司面试中的笔试题
- 面试笔试中的排序问题
- 面试笔试中的一些知识点
- 笔试面试---二维数组与数组指针
- 笔试面试中指针的那些事
- 指针的笔试面试经典题目
- C++指针数组和数组指针--笔试面试系列
- C#中的函数指针
- C#中的函数指针
- C#中的函数指针
- 28个Unix/Linux的命令行神器
- file-max与ulimit的关系与差别
- 九月四号作业讲解:
- 程序员常去的地方
- 用Jdk自带工具keytool生成受信任的证书
- 【笔试&面试】C#中的指针
- linux驱动头文件说明
- 查询锁表进程及杀掉进程
- 基准测试工具之tpcc-mysql
- struts1配置
- POJ 2828 线段树 水题
- SurfaceView(2D游戏基础)
- (())、let、expr、bc等计算命令的使用语法和应用技巧
- LeetCode 49: Anagrams