使用指標訪問陣列元素
在 C#中,陣列名稱和指向與陣列資料相同的資料型別的指標不是相同的變數型別。例如,int *p
和 int[] p
不是同一型別。你可以增加指標變數 p
,因為它沒有在記憶體中修復,但是陣列地址在記憶體中是固定的,你不能增加它。
因此,如果你需要使用指標變數訪問陣列資料,就像我們傳統上在 C 或 C++中那樣,你需要使用 fixed 關鍵字修復指標。
以下示例演示了這一點:
using System;
namespace UnsafeCodeApplication
{
class TestPointer
{
public unsafe static void Main()
{
int[] list = {10, 100, 200};
fixed(int *ptr = list)
/* let us have array address in pointer */
for ( int i = 0; i < 3; i++)
{
Console.WriteLine("Address of list[{0}]={1}",i,(int)(ptr + i));
Console.WriteLine("Value of list[{0}]={1}", i, *(ptr + i));
}
Console.ReadKey();
}
}
}
編譯並執行上述程式碼時,會產生以下結果:
Address of list[0] = 31627168
Value of list[0] = 10
Address of list[1] = 31627172
Value of list[1] = 100
Address of list[2] = 31627176
Value of list[2] = 200