Предположим, у нас есть этот массив целых чисел:
#define CAPACITY 42
int foo[CAPACITY];
И эти две функции, которые его обрабатывают:
void func1(int* begin, int* end) {
// Loop over the array
while(begin < end) {
int val = *begin++; // process element
}
}
void func2(int* begin, int size) {
// Loop over the array
for(int i = 0; i < size; ++i) {
int val = begin[i]; // process element
}
}
Первая будет называться как func1(foo, foo + CAPACITY)
: передачав указателе на начало массива, и указатель чуть выше последнего элемента.
Второй будет называться как func2(foo, CAPACITY)
: передача указателя на начало массива и размер массива.
Из-за того, как работает арифметика указателей, обе версии эквивалентны.