Небезопасная запись указателя / массива в C # - PullRequest
2 голосов
/ 23 июня 2009

Предположим, у меня есть:

unsafe {
    byte* start = GetStartLocation();
    int something = start[4];
}

Что такое something? Значение адреса памяти 4 байта вниз от начала?

Ответы [ 3 ]

6 голосов
/ 23 июня 2009

Say start указывает на ячейку памяти 0x12345678, и память выглядит так:

  0x12345678   0x12
  0x12345679   0x34
  0x1234567a   0x56
  0x1234567b   0x78
  0x1234567c   0x9a
  0x1234567d   0xbc

тогда something равно 0x9a.

Тот факт, что something имеет тип int, не имеет значения для интерпретации start[4] - он получает значение byte местоположения байта 4 от start.

2 голосов
/ 23 июня 2009

start[4] будет оцениваться в:

*(start + 4)
2 голосов
/ 23 июня 2009

Значением чего-либо является байтовое значение смещения 4 от начала, расширенное до типа int.

Это эквивалентно следующему коду

byte temp = start[4];
int something = temp;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...