Можете ли вы добавить массив без квадратных скобок или индекса до целого числа? Что в итоге? - PullRequest
0 голосов
/ 11 января 2019

Я читал онлайн-лекцию и увидел эту функцию для суммирования массива

int arraySum(int array[], const int n)
    {
        int sum = 0, *ptr;
        int *const arrayEnd = array + n;
        ...
    }

Раньше я не видел массив, добавленный к целому числу. Если n - размер массива, означает ли array + n, что arrayEnd присвоено значение последнего элемента в массиве [], или это означает что-то еще, например, адрес этого элемента?

Ответы [ 2 ]

0 голосов
/ 11 января 2019

void f(int array[]) и void f(int* array) - это одно и то же в C. Таким образом, вы почти правы, когда размышляете, что это адрес последнего элемента: он один за другим. Это означает, что это полезно не только для проверок, но и для разыменования, поскольку это может привести к сбою или получению значения мусора.

0 голосов
/ 11 января 2019

То, что вы видите, является арифметикой указателя.

array - указатель на начало вашего массива. Если предположить, что массив содержит n элементов, то array + n (или эквивалентно &array[n]) указывает на один элемент после конца массива.

Допустимо иметь указатель на один элемент после конца массива, однако вы не можете разыменовать этот указатель.

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