C#高级编程七十五天----C#使用指针

2023-11-21 10:48

本文主要是介绍C#高级编程七十五天----C#使用指针,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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#使用指针的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/401863

相关文章

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面