Функция обращения массива - 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, элементы массива будут перевернуты.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д