Сейчас я изучаю массивы. Я наткнулся на объявление массива и инициализацию его элемента таким образом:

int x[+30];
x[+1]=0;

Это меня немного смущает. Я имею в виду, что когда мы пишем:

x[n]=0;

Тогда это означает:

*(x+n)=0;

Тогда запись x[+1] будет означать *(x++1), и это кажется недействительным. Пожалуйста, поправьте меня за ошибку, которую я совершаю в понимании этой концепции.

5
utkarsh867 24 Фев 2016 в 18:46

2 ответа

Лучший ответ

x[n] означает *((x)+(n)) (обратите внимание на черные метки), а x[+1] означает *((x)+(+1)). Это действительно так.

N3337 5.2.1 Подписка

Выражение E1 [E2] идентично (по определению) * ((E1) + (E2))

10
erip 24 Фев 2016 в 20:46

Символ плюса + может действовать как унарный оператор. Обычно это не имеет никакого эффекта, но в результате он удаляется до того, как число будет разрешено. Например:

int x[+30];

Преобразован в

int x[operator+(30)];

Что тогда становится

int x[30];

Таким образом, это выражение

x[+1] = 0;

Просто разрешится как

x[1] = 0;

Он не будет разрешен как * (x ++ 1), тем более что это недопустимый синтаксис в C ++.

7
Xirema 24 Фев 2016 в 15:53