Использование *
в C немного сбивает с толку, потому что оно имеет два разных, но взаимосвязанных значения. Ваш пример сбивает с толку, потому что ОБА из этих значений используются в одной строке кода.
Когда непосредственно рядом с типом, *
является модификатором, который указывает, что вы ссылаетесь на указатель на этот тип. Это чаще всего наблюдается в объявлениях переменных, но может использоваться и в приведениях, как вы видите здесь с (WORD *)
.
Когда не используется с типом, *
- это унарный оператор, который разыменовывает указатель. Другими словами, он принимает значение операнда, обрабатывает его как ячейку памяти и возвращает содержимое этой ячейки. Оператор также определяет тип переменной, на который указывает операнд, и приводит значение в ячейке памяти к этому типу. Компилятор обычно выполняет проверку, чтобы убедиться, что операнд фактически является указателем. В этом случае компилятор знает, что &Array[withThisPosition])
- это указатель на байт, потому что Array
- это массив байтов.
Возвращаясь к вашему вопросу, ОБЫЧНО, когда *
находится в начале оператора C, это оператор разыменования, но я не буду гарантировать, что это всегда так.
Указатели давали мне меньше головной боли, когда я разделял два значения *
в моем мозгу.