Ajmal RS Ответов: 2

Помогите с указателями ! !


I understood most of the code but I am unclear on what the line ptr=-2 does to the overall code
    I mean does it change address of ptr or something ?

#include <iostream>

using namespace std;

void processptr(int *ptr)
{
    for(int i=4;i>2;i--)
    {
        (*ptr)*=i;
        ptr-=2;
    }
}

int main()
{
    int numbers[]={2,4,8,10};
    int *ptr=numbers+3;
    cout<<*ptr;
    cout<<'\n';
    processptr(ptr);
    cout<<'\n';
    for(int i=0;i<4;i++)
    {
    cout<<numbers[i]<<"@";
    cout<<"\n"<<i;
    }

    return 0;
}


Что я уже пробовал:

Я попытался запустить код и увидеть результат, но до сих пор не могу полностью понять код

Philippe Mori

И каков же выход... Вы ожидаете, что мы также попробуем программу, чтобы убедиться, что мы правильно ответили вам?

Поиск арифметика указателей в C и вы должны многое понять.

В вашем примере вы легко можете увидеть, что вы вызываете функцию с указателем на число 10 в массиве. Цикл начинается с i, равного 4, и умножает этот указатель на 4. На следующей итерации он умножит на 3 значение 2 пункта до того, как таким образом 4 * 3 = 12. И тогда все прекратится. Так что он должен напечатать 2, 12, 8, 40.

Ajmal RS

Большое спасибо, вывод, который вы получили, правильный, я не понимал, что изменение указателя тоже изменит массив, Ну что ж, думаю, я пойду изучать некоторые указатели

2 Ответов

Рейтинг:
2

Patrice T

ПТР=-2 ничего не значит, но это не ваш код, ваш код ptr - =2.
Используйте отладчик, чтобы увидеть, что делает ваш код. Он позволяет выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
2

Peter Leow

Участие в этом лекция[^].