首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 與 C# 指針淺析:從原理到實戰

     編輯:關於C++

C++ 指針四要素

  1. 指針類型:如 int*、char**、int(*)[3]。
  2. 指向類型:去掉變量名剩下的類型,如 int* 指向 int。
  3. 指針值:存儲的地址(32 位為 4 字節,64 位為 8 字節)。
  4. 指針佔用內存:指針變量本身在棧上佔 4/8 字節。

& 與 * 運算符

  • &a:取地址,產生指向 a 類型的指針。
  • *p:間接訪問,結果類型為 p 指向類型,地址為 p 的值。

指針存在的意義

  • 避免大對象拷貝:函數傳遞/返回指針只拷貝 4/8 字節。
  • 動態內存管理:new/delete 操作堆內存。
  • 實現多態、鏈表、樹等動態結構。

C# 的 unsafe 指針

C# 預設不允許指針,需在專案屬性勾選「允許不安全代碼」,並在方法/類前加 unsafe。
fixed 關鍵字「釘住」托管對象,防止 GC 移動內存導致指針失效。

C# 指針拷貝示例

public static unsafe void Copy(byte[] src, int srcIdx,
                               byte[] dst, int dstIdx, int count) {
    fixed (byte* pSrc = src, pDst = dst) {
        byte* ps = pSrc + srcIdx;
        byte* pd = pDst + dstIdx;
        for (int i = 0; i < count / 4; ++i) {
            *((int*)pd) = *((int*)ps);
            pd += 4; ps += 4;
        }
        for (int i = 0; i < count % 4; ++i) *pd++ = *ps++;
    }
}

不安全代碼風險

  • 繞過 CLR 類型安全檢查,可能導致內存損壞、安全漏洞。
  • 僅在極致性能敏感場景(如圖像處理、底層互操作)使用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved