C#中指針的簡單使用


 

原來C#不僅僅支持和C/C++中指針(或者說是引用)很像的委托delegate,還支持在unsafe代碼塊中使用指針,從而寫非托管的代碼(人為不讓垃圾回收機制來管理相應的內存)。在unsafe中就可以使用指針,基本用法和C++差不多(果然是一家人,哈哈)。

在用指針調用數組的時候需要使用fixed語句(只能在unsafe語句塊中使用)來固定指針變量的初始值,否則可能被垃圾回收機制改變指針變量的值,fixed語句可以禁止垃圾回收機制重定位可移動的變量。

fixed語句中可以設置指向托管變量的指針,並且執行該語句期間可以固定某變量。

基本語法

   fixed (<需要固定的變量>)

     {   <fixed語句塊,內部可以用指針對托管變臉操作>   }

下面上一個操作數組的簡單例子:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.IO;
 7 using System.Collections.Generic;
 8 
 9 namespace CsharpStudy
10 {
11 
12    
13 
14 
15 
16     class Program
17     {
18 
19 
20         static void Main(string[] args)
21         {
22             /************Main function***************/
23 
24             unsafe 
25             {
26                 int[] list = new int[3]{10, 20, 30};
27 
28                 fixed (int* p = list)
29                 {
30                     for (int i = 0; i < 3; i++)
31                     {
32                         Console.WriteLine(*(p + i));
33                     }
34 
35                 }
36             }
37             
38 
39             /****************************************/
40             Console.WriteLine();
41             Console.ReadKey();
42         }
43     }
44 
45 
46 }

例子的結果圖是

 

 注意,在VS中運行unsafe的代碼的時候需要在project的屬性中找到bulid,勾選允許非安全的代碼這一項。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM