В чем разница записи массива через указатели?

В языке C массивы могут быть переданы в функцию двумя способами - либо по значению (путем копирования всего массива), либо по указателю на его первый элемент. Разница в записи массива через указатели заключается в том, как мы обращаемся к элементам массива и применяем операции к ним.

Когда мы записываем массив через указатели, мы фактически передаем в функцию адрес памяти, где располагается первый элемент массива. Используя этот указатель, мы можем получить доступ к другим элементам массива путем смещения указателя.

Вот пример кода, который демонстрирует разницу между записью массива через указатели:

#include <stdio.h>

void print_array_by_value(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("n");
}

void print_array_by_pointer(int* arr, int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", *(arr + i));
    }
    printf("n");
}

int main() {
    int array[] = {1, 2, 3, 4, 5};
    int size = sizeof(array) / sizeof(array[0]);

    // запись массива по значению
    printf("Запись массива по значению: ");
    print_array_by_value(array, size);

    // запись массива через указатель
    printf("Запись массива через указатель: ");
    print_array_by_pointer(array, size);

    return 0;
}

В функции print_array_by_value мы передаем массив arr по значению, и чтобы получить доступ к его элементам, мы используем обычную запись arr[i], где i - индекс элемента.

В функции print_array_by_pointer мы передаем массив arr через указатель, и чтобы получить доступ к его элементам, мы используем запись *(arr + i), где arr + i - смещение указателя на i элементов от начала массива.

В обоих случаях мы получаем одинаковый результат - функции выводят элементы массива на экран. Однако запись через указатель позволяет сохранять память, поскольку не копирует весь массив при передаче его в функцию.

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