Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Отрицательный индекс


Автор: antonkonikov 10.6.2010, 22:40
Корректно ли нижеследующее присваивание в Cи? Если нет объясните почему. Иначе напишите фрагмент программы, где это присваивание корректно используется.
a[-3] = -5;


Модератор: Название темы должно отражать ее суть!

Автор: djamshud 10.6.2010, 22:50
Код

int main(){
int buf[10];
int *ptr=buf+5;
ptr[-3]=-5;
printf("%d\n",buf[2]);
return 0;}

Автор: Abyx 11.6.2010, 00:18
индекс массива имеет тип ptrdiff_t, а это тип со знаком

Добавлено через 5 минут и 46 секунд
Код

for(int *it = first + 1; it != last - 1; ++it)
{
      avg = (it[-1] + 2 * it[0] + it[1]) / 4;
      ...........
}

Автор: azesmcar 11.6.2010, 12:34
antonkonikov

Абсолютно корректно, обращение к массиву по индексу компилятором преобразовывается в *(array_ptr + index), если индекс отрицательный - получается *(array_ptr + (-index)), т.е. *(array_ptr - index). Дальше уже все зависит от этого адреса, если участок памяти в порядке - значит и программа в порядке.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)