c 中unsafe關鍵字用法

2022-03-24 23:59:20 字數 1188 閱讀 8279

(*) unsafe 和 fixed

unsafe

fixed (int* p = array)

}              

}指標在c#中是不提倡使用的,有關指標的操作被認為是不安全的(unsafe)。因此執行這段**之前,先要改乙個地方,否則編譯不過無法執行。

修改方法:在右側的solution explorer中找到你的專案,在專案圖示(綠色)上點右鍵,選最後一項properties,然後在build標籤頁裡把allow unsafe code勾選上。之後這段**就可以執行了,你會看到,上面這段**可以像c語言那樣用指標操縱陣列。但前提是必須有fixed (int* p = array),它的意思是讓p固定指向陣列array,不允許改動。因為c#的自動垃圾**機制會允許已經分配的內存在執行時進行位置調整,如果那樣,p可能一開始指的是array,但後來array的位置被調整到別的位置後,p指向的就不是array了。所以要加乙個fixed關鍵字,把它定在那裡一動不動,之後的操作才有保障。

另有兩點需要注意:

1)指標的使用必須放在unsafe的區域裡;unsafe關鍵字也可作為類或方法的修飾符。

2)fixed (int* p = array)中,p的定義不能寫在別處,而且fixed關鍵字也只能在unsafe區域裡使用。

(*) 略簡潔的unsafe寫法

class program

public static uint16 concisehtons(uint16 src)

return dest;

}static void main()

console.writeline(val);

// 更簡潔的寫法是把unsafe block寫在函式內部

val = concisehtons(val);

console.writeline(val);

}               

}(*) stackalloc

stackalloc的用處僅僅是把陣列分配在棧上(預設是分配在託管堆上的)。

class myclass

class program

}               

}注意:指標指向的記憶體一定要固定。凡是c#裡的引用型別(一切型別的陣列都是引用型別)都是分配在託管堆上的,都不固定。有兩種方法強制固定,一種是用stackalloc分配在棧上,另一種是用fixed分配在堆上。

關鍵字的用法 C 中const關鍵字用法總結

ark2000 看完了c primer的基礎篇,對const還是有點陌生,在這裡小小地總結一下吧。在變數的定義前加上const修飾符即可完成const物件的建立。const int val 5 const變數的值不能改變。val 5 error assignment of read only var...

C 中using關鍵字用法

c using用法詳解 using 關鍵字有兩個主要用途 一 作為指令,用於為命名空間建立別名或匯入其他命名空間中定義的型別。二 作為語句,用於定義乙個範圍,在此範圍的末尾將釋放物件。using指令 允許在命名空間中使用型別,這樣,您就不必在該命名空間中限定某個型別的使用 using system....

C中關鍵字inline用法

一 什麼是內聯函式 在c語言中,如果一些函式被頻繁的呼叫,不斷地用函式入棧,即函式棧,則會造成棧空間或者棧記憶體的大量消耗,為了解決這個問題,特別的引入了inline關鍵字,表示為內聯函式。棧空間指的是函式內資料的記憶體空間,在乙個系統下,棧空間的資源是有限的,假如頻繁大量的使用就會因棧空間的不足而...