Как объявить диапазон индексов массива не с нуля и работать с ним? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Например, надо объявить массив А[4..9][5..8] . Массив статический естественно. Работа с ним полагаю будет идентична?

Решение задачи: «Как объявить диапазон индексов массива не с нуля и работать с ним?»

textual
Листинг программы
int _arr[4];//_arr[0 .. 3]
int* arr = _arr - 5;//arr[5 .. 8]
 
int _arr2d[6][4];//_arr2d[0 .. 5][0 .. 3]
int(* arr2d)[4] = _arr2d - 4;//arr2d[4 .. 9][0 .. 3]
 
int _funnyArr[21];//_funnyArr[0 .. 20]
int* funnyArr = _funnyArr + 10;//funnyArr[-10 .. 10]

Объяснение кода листинга программы

  1. Объявляется одномерный массив _arr размером 4.
  2. Указатель на первый элемент массива _arr присваивается переменной arr.
  3. В результате, arr указывает на диапазон элементов массива _arr, начиная с индекса 5 и до 8 (включительно).
  4. Отнимая 5 от _arr, мы смещаем начало диапазона, который теперь указывает на элементы массива, начиная с индекса 5 и до 8 (включительно).
  5. Аналогично объявляется двумерный массив _arr2d размером 6 на 4.
  6. Указатель на первый элемент первого столбца массива _arr2d присваивается переменной arr2d.
  7. В результате, arr2d указывает на диапазон строк массива _arr2d, начиная с индекса 4 и до 9 (включительно), и на каждый из столбцов массива _arr2d.
  8. Отнимая 4 от _arr2d, мы смещаем начало диапазона, который теперь указывает на строки массива, начиная с индекса 4 и до 9 (включительно), и на каждый из столбцов массива _arr2d.
  9. Объявляется массив _funnyArr размером 21.
  10. Указатель на 11-й элемент массива _funnyArr присваивается переменной funnyArr.
  11. В результате, funnyArr указывает на диапазон элементов массива _funnyArr, начиная с индекса -10 и до 10 (включительно).
  12. Отнимая 10 от _funnyArr, мы смещаем начало диапазона, который теперь указывает на элементы массива, начиная с индекса -10 и до 10 (включительно).

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы