1. Для косвенной адресации. Мы не просто обращаемся к 325-й ячейке, а проводим вычисление, получаем 325 и обращаемся к ячейке с этим номером. Получили бы 456 — обратились бы к 456-й.
Это даёт кучу интересных структур данных, и самая простая из них — массив.
Многоуровневый указатель — это уже дело более высокого уровня. Пока указателем я называл просто адрес в памяти. Но, извините, в памяти хранятся однобайтовые целые, двухбайтовые целые, дробные, массивы, строчки, другие указатели — в общем, на более высоком уровне появляется понятие «тип данных». И указатели бывают на целое, на дробное — и на указатель!
2. Разница между каким-то адресом и началом структуры данных. Например, у нас есть такая структура данных (для простоты без выравнивания).
a : word
b : dword
c : byte
Тогда поле c находится по смещению 2+4 = 6, и если голова структуры по адресу 124, то поле c будет по адресу 124+6=130.
Также в стандартном режиме 8086 — 16-битный процессор с 1 мегабайтом адресуемой памяти — была хитрая система адресации под названием «сегмент:смещение», и адрес вычислялся по формуле сегмент·16 + смещение. При этом было принято считать, что сегмент незыблем, а по структуре данных (которая при этом не могла превышать 64K) мы двигались, меняя смещение.
3. Т.н. «переключение контекста» — ядро ОС просто сохраняет регистры в памяти. Очень долгая задача, кстати.