C#编程(七十五)----------C#使用指针
原文链接: http://blog.csdn.net/shanyongxu/article/details/47321441
在C#中使用指针的语法
如果想在C#中使用指针,首先对项目进行过配置:
看到属性了吗?单击:
看到那个允许不安全代码了吗?选中
然后将有关指针,地址的操作放在unsafe语句块中.使用unsafe关键字是告诉编译器这里的代码是不安全的.
unsafe关键字的使用:
(1)放在函数前,修饰函数,说明在函数内部或函数的形参涉及到指针操作:
unsafe static void FastCopy(byte[] src, byte[] dst, int count)
{
// Unsafe context: can use pointers here.
}
不安全上下文的方位从参数列表扩展到方法的结尾,因此指针作为函数的参数时需使用unsafe关键字.
(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#使用指针
在C#中使用指针的语法 假设想在C#中使用指针,首先对项目进行过配置: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/font ...
- 孤荷凌寒自学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 ...
- 《手把手教你》系列基础篇(七十五)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 中篇(详解教程)
1.简介 上一篇中介绍了DataProvider如何传递参数,以及和一些其他方法结合传递参数,今天宏哥接着把剩下的一些常用的也做一下简单的介绍和分享. 2.项目实战1 @DataProvider + ...
- C#编程(七十六)----------使用指针实现基于栈的高性能数组
使用指针实现基于栈的高性能数组 以一个案例为主来分析实现方法: using System; using System.Collections.Generic; using System.Linq; u ...
- Python excel文件操作,编程练习题实例七十五
纯文本文件 student.txt为学生信息, 里面的内容(包括花括号)如下所示: { "1":["张三",150,120,100], "2" ...
随机推荐
- Laravel Cache 缓存钉钉微应用的 Access Token
钉钉微应用的 Access token 如何获取? Access_Token 是企业访问钉钉开放平台全局接口的唯一凭证,即调用接口时需携带Access_Token.从接口列表看,所有接口都需要携带 a ...
- cf 1041C双指针
比赛的时候想着用单调队列做... 打完发现其实就是个双指针 /* 构造双指针解决即可 */ #include<iostream> #include<cstring> #incl ...
- whiledo循环输出数组中的分数
var scores = [24, 32, 17]; var arrayLength = scores.length; var i =0; while(i < arrayLength){ var ...
- JavaScript常见的真值
值 说明 var a =true 值等于true: var a = 1 非0的数字 var a =“hello” 有内容的字符串 var a=20/5 运算结果非0 var a='true' 有内容 ...
- 依赖注入与Unity
关于控制反转(Inversion of Control)和依赖注入(Dependency Injection)大家网上可以找下相关概念,在<小菜学习设计模式(五)-控制反转(Ioc)>这篇 ...
- Ubuntu 8.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解
Linux版本:Ubuntu8.04 内核版本:Linux 2.6.24 交叉编译器版本:arm-linux-gcc-3.4.1 交叉编译器下载链接: https://share.weiyun.com ...
- JavaScript中为什么string可以拥有方法?
所有文章搬运自我的个人主页:sheilasun.me 引子 我们都知道,JavaScript数据类型分两大类,基本类型(或者称原始类型)和引用类型. 基本类型的值是保存在栈内存中的简单数据段,它们是按 ...
- bzoj1026
题意: windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 数据范围 A,B≤ ...
- 6-2 S树 uva712
这题关键是 反转 查询是固定按照x1x2x3来的 那么先收集前面的顺序 然后在数组里面直接调用即可 比如前面的树是 x3 x1 x2 就把这个当作数组下标 最左边的树是 1<&l ...
- 【Java】 剑指offer(13) 剪绳子
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 给你一根长度为n绳子,请把绳子剪成m段(m.n都是整数,n> ...