首页 > 编程语言 >C#——fixed用法

C#——fixed用法

时间:2024-09-19 11:15:26浏览次数:5  
标签:语句 Console C# long 用法 WriteLine byte fixed

1.fixed语句

*固定用于指针操作的变量;

*可防止垃圾回收器重新定位可移动变量,并声明指向该变量的指针;

*固定变量的地址,在语句的持续时间内不会更改

*fixed语句中,只能使用声明的指针,声明的指针是只读的,无法修改

*fixed语句只能在不安全的上下文中使用

        static void Main(string[] args)
        {
            unsafe
            {
                byte[] bytes =new byte[]{ 1, 2, 3 };
                fixed (byte* pointerToFirst = bytes)
                {
                    Console.WriteLine($"第一个元素的存储地址是: {(long)pointerToFirst:X}.");
                    Console.WriteLine($"第一个元素是: {*pointerToFirst}.");
                }
            }
            // 第一个元素的存储地址是: 29D24A0.(这个值每次运行都会变化)
            // 第一个元素是: 1.
        }

 

2.使用&获取元素的地址时,fixed语句保证垃圾回收器在语句主体执行期间不会重新定位或释放包含对象实例

        static void Main(string[] args)
        {
            unsafe
            {
                int[] numbers = new int[] { 10, 20, 30,40 };
                fixed (int* toFirst = &numbers[0], toLast = &numbers[numbers.Length-1])
                {
                    Console.WriteLine((long)toFirst);
                    Console.WriteLine((long)toLast);
                    Console.WriteLine(toLast - toFirst);
                    // output:
                    // 46081092
                    //46081104
                    //3
                }
            }
        }

 

3.使用fixed关键字创建在数据结构中具有固定大小的数组缓冲区

*编写与其他语言或平台的数据源进行互操作的方法时,固定大小的缓冲区很有用

*固定大小的缓冲区可采用允许用于常规结构成员的任何属性或修饰符

*限制:数组类型必须为bool   byte  char   short  int  long sbyte  ushort  uint   ulong   float  或  double

internal unsafe struct Buffer
{
    public fixed char fixedBuffer[128];
}

 

*固定大小的缓冲区与常规数组的区别体现在以下方面:

  • 只能在 unsafe 上下文中使用。
  • 只能是结构的实例字段。
  • 它们始终是矢量或一维数组。
  • 声明应包括长度,如 fixed char id[8]。 不能使用 fixed char id[]

标签:语句,Console,C#,long,用法,WriteLine,byte,fixed
From: https://www.cnblogs.com/echo-efun/p/18420122

相关文章

  • 两个用于改善图形渲染质量的属性UseLayoutRounding和SnapsToDevicePixels
    UseLayoutRounding:获取或设置一个值,该值指示是否应向此元素的大小和位置布局应用布局舍入。UseLayoutRounding当元素的属性为true时,在传递Arrange过程中Measure计算的所有非整型像素值都会舍入到整个像素值。在像素边界上绘制对象时,当边缘落在设备像素中间时,消除由抗锯齿生成的......
  • 易优eyoucms网站安装报错 SQLSTATE[HY000]: General error: 1615 Prepared statement
    遇到“SQLSTATE[HY000]:Generalerror:1615Preparedstatementneedstobere-prepared”这类错误,通常是由于数据库连接参数配置不当导致的。具体来说,这通常是因为PDO驱动在处理预编译语句时出现了问题。解决方法按照以下步骤修改数据库配置文件,可以解决这个问题:1.找到数......
  • 易优eyoucms网站安装时数据库提示写入表ey_archives记录失败,请刷新重试
    遇到安装时数据库提示“写入表 ey_archives 记录失败,请刷新重试”的问题,可能是由于多种原因导致的,包括数据库连接问题、权限问题、数据冲突等。以下是详细的解决步骤:解决步骤清空数据库重新安装切换数据库版本手动导入数据库1.清空数据库首先尝试清空数据库,确保数据库......
  • 易优eyoucms网站安装进行到第四步出错。错误提示{"msg":"u5199u5165u8868ey_ad_positi
    打包备份本地网站后上传到空间时,安装进行到第四步出错。错误提示{"msg":"u5199u5165u8868ey_ad_positionu8bb0u5f55u5931u8d25uff0cu8bf7u5c1du8bd5F5u5237u65b0!"}。遇到在打包备份本地网站并上传到空间后,在安装过程中出现错误提示“写入表 ey_ad_position 记录失败,请刷新重......
  • 怎么办?用DolphinScheduler调度执行复杂的HiveSQL时无法正确识别符号
    在使用ApacheDolphinScheduler调度执行复杂的HiveSQL时,HQL包含多种海豚无法正确识别的符号,怎么办?本文提供了可行的思路和方法,供用户参考。一、目的在Hive中完成复杂JSON,既有对象还有数组而且数组中包含数组的解析后,原本以为没啥问题了,结果在DolphinScheduler中调度又出现了大问......
  • kubectl命令整理
    目录常用命令查看k8s内节点、Pod资源使用情况列出一个或多个资源——get显示资源的详细状态——describe删除资源——delete进入容器——exec查看日志——logs按场景分类基础命令:create,delete,get,run,expose,set,explain,edit设置命令:label,annotate,completionkubectl部署命令:rollout,rol......
  • 易优eyoucms网站本地测试正常,放到虚拟主机出错
    遇到在本地测试正常但在虚拟主机上安装时出现问题的情况,通常与环境配置有关。根据您提供的错误信息,问题可能在于文件路径或环境配置不一致。以下是详细的解决步骤:解决步骤检查文件路径调整PHP版本检查文件权限检查虚拟主机配置1.检查文件路径确保文件路径正确无误。2.......
  • 【换行符】Windows、Unix、Mac不同操作系统的回车符\r和换行符\n
    一、概念:换行符‘\n’和回车符‘\r’(1)换行符就是另起一行---'\n'10换行(newline)(2)回车符就是回到一行的开头---'\r'13回车(return)所以我们平时编写文件的回车符应该确切来说叫做回车换行符CR:回车(CarriageReturn)\rLF:换行(LineFeed)\n二、应用:(1)在微软的MS-DO......
  • C++ 逆向之 main 函数的查找
    在整个程序的逆向分析过程中,寻找main函数是逆向分析过程的第一步,程序的主要逻辑从这里展开。这里面涉及到两个概念:用户入口(UserEntryPoint)和应用程序入口(ApplicationEntryPoint)。用户入口用户入口是开发者编写的用于程序开始的函数。对于大多数C/C++程序而言,这个入......
  • 易优eyoucms网站怎么关闭后台登录验证码呢
    在易优CMS(EyouCMS)中关闭后台登录验证码的操作相对简单。以下是详细的步骤:1.登录后台首先需要登录到后台管理系统。登录后台访问后台登录页面:访问/admin.php或相应的后台登录地址。输入用户名和密码:输入管理员账号和密码登录后台。2.进入系统设置进入后......