почему разница между двумя указателями, указывающими на разные элементы массива, заключается в количестве элементов между этими двумя указателями? - PullRequest
0 голосов
/ 12 апреля 2020
int main()
{
    int arr[]={2,3,5,6,8};
    int *ptr;

    ptr=&arr[3];
    cout<<ptr-arr;
}

В. Почему ответ составляет 3 после компиляции кода, то есть как должно быть 3 * sizeof (int), которое в этом случае должно быть 3 * 4 = 12?

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Причина в том, что гораздо проще написать правильный код.

Когда разница указателей между последовательными элементами массива равна 1, вы можете использовать ++p для обхода массива (при условии p - указатель на элемент). Например:

int a[10];

for (auto p = a, e = a + 10; p != e; ++p)
    *p = 42;

Обратите внимание, что код не должен иметь дело с размером элементов. Если тип массива изменится с int на double, код менять не нужно и он по-прежнему правильный.

1 голос
/ 12 апреля 2020

Когда вы вычитаете указатели, вы получаете расстояние между ними, а не назначенный размер. То же самое касается итераторов в STL.

https://en.cppreference.com/w/cpp/language/operator_arithmetic#Additive_operators

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...