В C и C ++ массив никогда не передается по значению.
Когда в объявлении функции появляется тип массива (как в void f(int a[])
), этот тип неявно преобразуетсяк соответствующему типу указателя (как в void f(int* a)
).
Когда вы используете имя массива в большинстве выражений, оно неявно преобразуется в указатель на его первый элемент.Итак, учитывая int v[100]
, когда вы вызываете f(v)
, передается указатель на начальный элемент v
.(Существует несколько исключений для неявного преобразования, особенно когда массив является операндом оператора sizeof
или унарного &
).
Арифметика указателя всегда выполняется с точки зрения размера указанногок элементу.Таким образом, с учетом v + 1
массив v
неявно преобразуется в указатель на свой начальный элемент (эквивалентный &v[0]
) и увеличивается на sizeof(int)
байт, указывая на v[1]
.