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 ...
随机推荐
- Censoring(bzoj 3940)
Description Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so ...
- Java-二叉树-插入、删除、遍历
二叉树的具体特性和细节知识点,自行百度,直接上代码. 节点:节点内容.左子孩子.右子孩子.父亲 class Node { private int data; private Node leftChil ...
- 标准C程序设计七---47
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 43深入理解C指针之---指针与树
一.size_t:用于安全表示长度,所有平台和系统都会解析成自己对应的长度 1.定义:size_t类型表示C中任何对象所能表示的最大长度,是个无符号整数:常常定义在stdio.h或stdlib.h中 ...
- hdu 4183(网络流)
Pahom on Water Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- AC日记——三连击 洛谷 P1008
题目背景 本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序. 题目描述 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2: ...
- AC日记——爱改名的小融2 codevs 3149
3149 爱改名的小融 2 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description Wikioi上有个人叫小融,他喜 ...
- Ampzz 2011 Cross Spider 计算几何
原题链接:http://codeforces.com/gym/100523/attachments/download/2798/20142015-ct-s02e07-codeforces-traini ...
- luogu P3811 【模板】乘法逆元
题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下的逆元. 输入输出样例 输入样 ...
- Atcoder Grand Contest 024
A 略 B 略 C 略 D(构造分形) 题意: 给出一个由n个点的组成的树,你可以加一些点形成一个更大的树.对于新树中的两个点i和j,如果以i为根的树与以j为根的树是同构的那么i和j颜色可以相同.问最 ...