В настоящее время я пытаюсь избежать арифметических операций с указателями в C для написания эмулятора.
Обычно, если вы добавляете 1
к указателю в C, вы добавляете размер указателя на объектвместо.Однако я пытаюсь работать с битами и байтами, так что это нежелательно.
Мне было интересно, использовал ли я слишком много скобок в этом примере:
*(int16_t *)(((intptr_t)bc)+sp)
А если нет,тогда это эквивалентно этому?:
*(int16_t *)((intptr_t)bc+sp)
sp
- это адрес стека с выравниванием по страницам для моего эмулятора (получен через. mmap
без установки MAP_FIXED
).Это тип intptr_t
.
bc
- это имя типа int16_t *
.Это указатель на комбинацию из двух int8_t
.