@barboskin93

В чем разница записи массива через указатели?

Задача заполнить массив числами фибоначи. Задачу получилось решить, но не сразу.
void array_fib(int* array, int* limit) {
    if ( limit - array == 0){
    }
    if (limit - array == 1){
        array[0] = 1;}
    if (limit - array == 2){
        array[0] = 1;
        array[1] = 1;}
    if (limit - array > 2){
    for (int *current = array+2; current < limit; current ++) {
        array[0] = 1;
        array[1] = 1;
        *current = *(current-1) + *(current-2);} 
    }
}

Изначально заполнял массив так *current = (*current-1) + (*current-2) и была ошибка. Никак не могу понять в чем разница этих двух записей, разве они не аналогичные?
  • Вопрос задан
  • 263 просмотра
Пригласить эксперта
Ответы на вопрос 3
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Проблема в том, что * выполняется перед вычетанием. *(current-1) - это предыдущий элемент. (*current-1) в плохой версии - это текущее значение минус 1.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Приоритет операции * выше, чем у -
Ответ написан
Комментировать
CityCat4
@CityCat4 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
разве они не аналогичные?

Нет.
*(current-1) // Взять значение по адресу current - 1
(*current-1) // Взять значение пo адресу current и вычесть из него (значения) 1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы