Урок 19: Арифметика указателей и массивы
С указателями можно выполнять арифметику — но арифметику умную: p + 1 сдвигается не на один байт, а на один целый элемент, то есть на sizeof(type) байт. Здесь раскрывается большой секрет массивов: имя массива «распадается» (decays) в адрес своего первого элемента — arr это в точности &arr[0]. Отсюда
Массив это ряд соседних ящиков вдоль улицы. Имя массива это адрес первого ящика, а p + 1 означает «прыгни к следующему ящику» — сколько бы сантиметров в ширину ни был каждый ящик, прыжок всегда ровно на один целый ящик.
- арифметика указателей
- Сложение и вычитание над указателями. p + 1 переходит к следующему элементу, а не к следующему байту.
- шаг элемента
- p + 1 добавляет к адресу sizeof(type) байт — для int (4 байта): с 1000 до 1004.
- распад массива
- В большинстве выражений имя массива становится адресом своего первого элемента: arr == &arr[0].
- тождество arr[i] == *(arr + i)
- Индексация это сокращение для арифметики: прыгнуть на i элементов от начала и обратиться к значению.
- обход указателем
- Цикл, который продвигает указатель по массиву: while (p < arr + n) { ...; p++; }.