﻿# V2563\. MISRA\. Array indexing should be the only form of pointer arithmetic and it should be applied only to objects defined as an array type\.

Данное диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\. 

Данное правило актуально только для языка C\+\+\. Данное правило MISRA рекомендует не использовать адресную арифметику\. Единственной формой адресной арифметики, допускаемой к использованию данным правилом, является операция индексирования \('\[\]'\), применённая к сущности, объявленной как массив\.

Исключение: допускается использовать инкремент и декремент \('\+\+' и '\-\-'\)\.

Использование адресной арифметики усложняет чтение программы и может являться причиной неправильного понимания написанного когда\. С другой стороны, использование индексирования является явным и легко читаемым, и даже если при его использовании будет внесена ошибка, её будет легче обнаружить\. То же касается и операций инкремента/декремента: они явно дают понять, что мы последовательно обходим область памяти, представляющую собой непрерывную область данных\.

Пример нарушения правила: 

```cpp
int arr[] = { 0, 1, 2 };
int *p = arr + 1;        //+V2563
p += 1;                  //+V2563
int *q = p[1];           //+V2563
```

Корректный вариант кода:

```cpp
int arr[] = { 0, 1, 2 };
int *p = &arr[1];
++p;
```