Предположим, у меня есть массив byte [], мне интересно, что я на самом деле делаю, когда делаю указатель на массив и затем приводю его к типу int.Когда я разыменовываю указанный указатель int, я получаю большее число в приведенном ниже случае: (код может содержать ошибки)
byte[] bytes = new byte[100];
bytes[0] = 1;
bytes[1] = 2;
bytes[2] = 3;
bytes[3] = 4;
fixed (byte* pMem = &bytes[0])
{
Debug.WriteLine("{0:x16}", (int)pMem);
byte* pMemPlus1 = pMem + 1;
Debug.WriteLine("{0:x8}", *pMemPlus1);
byte* pMemPlus2 = pMem + 2;
Debug.WriteLine("{0:x16}", *pMemPlus2);
int* pArrayBase = (int*) pMem;
Debug.WriteLine("{0:x8}", *pArrayBase);
int* pArrayBasePlus1 = pArrayBase+1;
Debug.WriteLine("{0:x8}", *pArrayBasePlus1;
}
Правильно, как и ожидалось, разыменование pMem, PMemPlus1 и PMemPlus2 до 1,2 и 3. (int) pMem Я так понимаю, это значение указателя (адрес памяти).
Когда он приводится как указатель типа int, pArrayBase дает 4030201, а pArrayBasePlus1 дает число 4. Последнее имеет смысл, потому чтоint имеет длину 4 байта, верно.Но я не понимаю.результат, когда я просто разыменовываю указатель массива int-cast (pArrayBase).Есть объяснения?Возможно, я не понимаю концепцию литья должным образом.