Функция обращения массива - C (СИ)
Формулировка задачи:
Составьте функцию revarray, переставляющую элементы любого массива в обратном порядке. Функция должна быть объявлена как
void revarray(void *base, unsigned long nel, unsigned long width)
{
...
}
Здесь параметр base означает указатель на начало массива, nel – количество элементов в массиве, а width – размер каждого элемента массива в байтах.
Проверка работоспособности функции revarray будет осуществляться путём присоединения её к программе вида
#include <stdio.h> int array[] = { 1000000000, 2000000000, 3000000000, 4000000000, 5000000000 }; void revarray(void*, unsigned long, unsigned long); int main(int argc, char **argv) { revarray(array, 5, sizeof(int)); int i; for (i = 0; i < 5; i++) { printf("%d\n", array[i]); } return 0; }
Решение задачи: «Функция обращения массива»
textual
Листинг программы
void revarray(void* ptr, unsigned long size, unsigned long bytes) { for (int i=0, j=(size-1)*bytes; i<j; i+=bytes, j-=bytes) for(int k=0; k<bytes; k++) { *(((char*)ptr)+i+k)^=*(((char*)ptr)+j+k); *(((char*)ptr)+j+k)^=*(((char*)ptr)+i+k); *(((char*)ptr)+i+k)^=*(((char*)ptr)+j+k); } }
Объяснение кода листинга программы
- В данном коде представлена функция revarray, которая принимает три аргумента: ptr (указатель на массив), size (размер массива в элементах) и bytes (размер одного элемента в байтах).
- Внутри функции используется два вложенных цикла. Первый цикл идет от 0 до (size-1)*bytes, а второй - от 0 до bytes.
- В каждой итерации внутреннего цикла происходит обмен значений между указателями ptr[i] и ptr[j], где i и j меняются на противоположные значения.
- Операция обмена реализуется с помощью оператора XOR (^).
- В каждой итерации внешнего цикла происходит смещение указателя ptr на размер одного элемента в байтах.
- Таким образом, после выполнения функции revarray, элементы массива будут перевернуты.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д