首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> C# 入門

C# 不安全代碼與指針操作:unsafe/fixed/編譯選項實戰

     編輯:C# 入門

C# 不安全代碼與指針操作:unsafe/fixed/編譯選項實戰

C# 默認安全模式下禁止直接內存操作。標記 unsafe 區塊可使用指針,實現高性能互操作或底層優化。

指針聲明與基本用法

type *varName;  // 如 int *p, double *d, char *c

僅允許在 unsafe 上下文中使用:

unsafe {
    int var = 20;
    int* p = &var;
    Console.WriteLine($"值: {var}, 位址: {(int)p}");
}

局部 unsafe 區塊

不必標記整個方法,可僅標記片段:

public static void Main() {
    unsafe {
        int var = 20;
        int* p = &var;
        Console.WriteLine(p->ToString());  // 解引用獲取值
    }
}

指針作方法參數

public unsafe void Swap(int* a, int* b) {
    int t = *a; *a = *b; *b = t;
}
public static void Main() {
    int x=10, y=20;
    Swap(&x, &y);  // x=20, y=10
}

固定數組與指針遍歷

C# 數組在內存可移動(GC 壓縮),需 fixed 鎖定:

int[] arr = {10, 100, 200};
fixed (int* ptr = arr) {
    for (int i=0; i<3; i++) {
        Console.WriteLine($"arr[{i}] 位址: {(int)(ptr+i)}, 值: {*(ptr+i)}");
    }
}

編譯不安全代碼

  • 命令行:csc /unsafe Program.cs
  • Visual Studio:項目屬性 → Build → 勾選 "Allow unsafe code"

警告: 不安全代碼繞過 CLR 內存安全機制,可能導致內存洩漏、類型安全違規、GC 錯誤。僅在性能關鍵路徑、互操作非托管庫時使用,並嚴格審查。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved