吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1634|回复: 2
收起左侧

[学习记录] C# 学习笔记不安全的代码(指针) unsafe

[复制链接]
Cool_Breeze 发表于 2021-3-19 14:13
本帖最后由 Cool_Breeze 于 2021-3-19 14:36 编辑

[C#] 纯文本查看 复制代码
using System;

class GenericExercise
{
    delegate void GenericDelegate<T>(ref T a, ref T b);
    static unsafe void Main() // 注意 unsafe
    {
        int[] a = {1, 2, 3};
        int[] b = {4, 5, 6};
        
        // fixed 语句可防止垃圾回收器重新定位可移动的变量。 fixed 语句仅允许存在于不安全的上下文中。 还可以使用 fixed 关键字创建固定大小的缓冲区。
        fixed(int* pa = &a[0], pb = &b[0])
        {
            int temp;
            for (int i=0; i<a.Length; i++) // 交换值
            {
                temp = *(pa +i);
                *(pa +i) = *(pb +i);
                *(pb +i) = temp;
            }
        }
        
        foreach (var i in a) Console.WriteLine(i); // 4, 5, 6
        foreach (var i in b) Console.WriteLine(i); // 1, 2, 3
        
        string str = "52破解"; // string str 就是一个 char 类型列表的首地址
        fixed(char* pstr = str)
        {
            for (int i=0; i<str.Length; i++)
                Console.WriteLine(*(pstr+i)); // 5 2 破 解 
        };
        
        // 结构体
        Point point = new Point(){x=111,y=222};
        Point* p = &point; // 不能使用fixed语句获取已固定表达式的地址, 这里直接赋值
        p->x = 333;
        Console.WriteLine(p->x); // 333
        Console.WriteLine(p->y); // 222
        
        // 枚举
        Color color = Color.Red;
        Color* colorp = &color;
        Console.WriteLine(*colorp); // Red
        
        Class n = new Class(){x=a};
        fixed(int* pn = &n.x[0])
        {
            for (int i=0; i<n.x.Length; i++)
                Console.WriteLine(*(pn+i));  // 4 5 6
        };
        // Class* pn // 无法获取托管类型的地址、大小或声明指向托管类型的指针
    }
    
    struct Point
    {
        public int x;
        public int y;
    }
    
    enum Color
    {
        Red,
        Blue,
        Green
    }
    
    sealed class Class
    {
        public int[] x;
    }
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Laugher_ 发表于 2021-3-22 15:39
unsafe。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 05:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表