Для лучшего понимания я перетасую порядок ответов:
2 - array
- указатель типа void
. В C указатели могут быть назначены указателям типа void*
и от них. Любой указатель на объект может быть преобразован в тип void*
без потери информации. Если результат преобразуется обратно в исходный тип указателя, исходный указатель восстанавливается.
1 - Он не работает одинаково для отдельных элементов, у вас нет универсального типа, который может быть назначен любому типу. Таким образом, код переключает содержимое указанной памяти.
3 - n
- количество элементов в массиве, а size
- размер одного элемента в массиве. stride = size * sizeof(char);
означает, что stride
равно size
, поскольку sizeof(char)
равно 1. Размер массива sizeof(array)
равен n * size
- количество элементов в массиве, умноженное на размер элемента. Поскольку i
и j
меньше n
, i * stride
и j * stride
никогда не будет больше памяти, используемой массивом. Хотя мне интересно, почему использование этого stride
, насколько я знаю, sizeof(char)
всегда равно 1.