C#高级编程七十五天----C#使用指针
在C#中使用指针的语法
假设想在C#中使用指针,首先对项目进行过配置:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
看到属性了吗?单击:
看到那个同意不安全代码了吗?选中
然后将有关指针,地址的操作放在unsafe语句块中.使用unsafekeyword是告诉编译器这里的代码是不安全的.
unsafekeyword的使用:
(1)放在函数前,修饰函数,说明在函数内部或函数的形參涉及到指针操作:
unsafe static void FastCopy(byte[] src, byte[] dst, int count)
{
// Unsafe context: can use pointers here.
}
不安全上下文的方位从參数列表扩展到方法的结尾,因此指针作为函数的參数时需使用unsafekeyword.
(2)将有关指针的操作放在由unsafe声明的不安全块中
unsafe{
//unsafe context:can use pointers here
}
案例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Csharp中使用指针
{
class Program
{
static void Main(string[] args)
{
int i = 1;
unsafe
{
Increment(&i);
}
Console.WriteLine(i+"\n");
//演示怎样使用指针操作字符串
string s = "Code Project is cool";
Console.WriteLine("the original string : ");
Console.WriteLine("{0}\n",s);
char[] b = new char[100];
//将指定书目的字符从此实例中的指定位置拷贝到Unicode字符数组的指定位置
s.CopyTo(0, b, 0, 20);
Console.WriteLine("the encode string : ");
unsafe
{
fixed (char* p = b)
{
NEncodeDecode(p);
}
}
for (int t = 0; t < 10; t++)
{
Console.WriteLine(b[t]);
}
Console.WriteLine("\n");
Console.WriteLine("the decoded string : ");
unsafe
{
fixed (char* p = b)
{
NEncodeDecode(p);
}
}
for (int t = 0; t < 20; t++)
Console.Write(b[t]);
Console.WriteLine();
Console.ReadKey();
}
unsafe public static void Increment(int* p)
{
*p = *p + 1;
}
/// <summary>
/// 将一段字符串通过异或运算进行编码解码的操作.假设您将一段字符串送入这个
/// 函数,这个字符串会被编码,假设将这一段已经编码的字符送入这个函数,
/// 这段字符串就会
/// 解码
/// </summary>
/// <param name="s"></param>
unsafe public static void NEncodeDecode(char* s)
{
int w;
for (int i = 0; i < 20; i++)
{
w = (int)*(s + i);
w = w ^ 5;//按位异或
*(s + i) = (char)w;
}
}
}
}
当中用到了fixed,以下对其进行必要的介绍:
fixed语句仅仅能出如今不安全的上下文中,C#编译器仅仅同意fixed语句中分配指向托管变量的指针,无法改动在fixed语句中初始化的指针.
fixed语句禁止垃圾回收器重定位可移动的变量.当你在语句或函数之前使用fixed时,你是告诉.net平台的垃圾回收器,在这个语句或函数运行完成前,不得回收其所占用的内存空间.
C#高级编程七十五天----C#使用指针的更多相关文章
- C#编程(七十五)----------C#使用指针
原文链接: http://blog.csdn.net/shanyongxu/article/details/47321441 在C#中使用指针的语法 如果想在C#中使用指针,首先对项目进行过配置: 看 ...
- C#高级编程 第十五章 反射
(二)自定义特性 使自定义特性非常强大的因素时使用反射,代码可以读取这些元数据,使用它们在运行期间作出决策. 1.编写自定义特性 定义一个FieldName特性: [AttributeUsage(At ...
- 【读书笔记】C#高级编程 第二十五章 事务处理
(一)简介 事务的主要特征是,任务要么全部完成,要么都不完成. (二)概述 事务由事务管理器来管理和协调.每个影响事务结果的资源都由一个资源管理器来管理.事务管理器与资源管理器通信,以定义事务的结果. ...
- 【读书笔记】C#高级编程 第十五章 反射
(一)在运行期间处理和检查代码 自定义特性允许把自定义元数据与程序元素关联起来.反射是一个普通术语,它描述了在运行过程中检查和处理程序元素的功能.例如,反射允许完成的任务: 枚举类型的成员 实例化新对 ...
- 孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5
孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...
- 第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表、课程机构表、讲师表
第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表.课程机构表.讲师表 创建名称为app_organization的课 ...
- “全栈2019”Java第七十五章:内部类持有外部类对象
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 学习ASP.NET Core Razor 编程系列十五——文件上传功能(三)
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- 并发编程(十五)——定时器 ScheduledThreadPoolExecutor 实现原理与源码深度解析
在上一篇线程池的文章<并发编程(十一)—— Java 线程池 实现原理与源码深度解析(一)>中从ThreadPoolExecutor源码分析了其运行机制.限于篇幅,留下了Scheduled ...
随机推荐
- PHP中的验证码类(验证码功能设计之一)
<!--vcode.class.php内容--> <?php class Vcode { private $width; //宽 private $height; //高 priva ...
- vue.js源码学习分享(九)
/* */ var arrayKeys = Object.getOwnPropertyNames(arrayMethods);//获取arrayMethods的属性名称 /** * By defaul ...
- struts中json机制与普通页面跳转机制混用(全局结果集配置返回json)
package继承json-default与struts-default 返回结果是add的话将addResult属性转换为json返回(addResult属性有getter,setter方法),返回 ...
- ATT汇编与Intel汇编的区别,摘自《深入分析linux内核源码》一书
2.6.1 AT&T与Intel汇编语言的比较 我们知道,Linux是Unix家族的一员,尽管Linux的历史不长,但与其相关的很多事情都发源于Unix.就Linux所使用的386汇编语言而言 ...
- Python入门--20--类、对象
OO=Object Oriented 面向对象 python是面向对象的编程语言 OO的特征: 1.封装:把一堆东西都扔到一起,变为一个类 2.继承:假如一个类里面 3.多态:不同的类有相同名称的函数 ...
- AC日记——Number Sequence hdu 1711
Number Sequence Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- js-页面需展示大量图片时,采用lyz.delayLoading.min.js,图片在屏幕时加载显示
本文本内容拷贝至:https://blog.csdn.net/xuanwuziyou/article/details/48199123 当一个网页中有大量图片时,浏览器会逐个去下载这些图片,等全部下载 ...
- Codeforces 620E New Year Tree(线段树+位运算)
题目链接 New Year Tree 考虑到$ck <= 60$,那么用位运算统计颜色种数 对于每个点,重新标号并算出他对应的进和出的时间,然后区间更新+查询. 用线段树来维护. #includ ...
- House Robber(动态规划)
思路: 代码: class Solution { public: int rob(vector<int> &num) { ; int size=num.size(); ) ]; v ...
- window 驱动开发
http://blog.csdn.net/chenyujing1234/article/category/1147469/5