Функция обращения массива - 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);
        }
}

Объяснение кода листинга программы

  1. В данном коде представлена функция revarray, которая принимает три аргумента: ptr (указатель на массив), size (размер массива в элементах) и bytes (размер одного элемента в байтах).
  2. Внутри функции используется два вложенных цикла. Первый цикл идет от 0 до (size-1)*bytes, а второй - от 0 до bytes.
  3. В каждой итерации внутреннего цикла происходит обмен значений между указателями ptr[i] и ptr[j], где i и j меняются на противоположные значения.
  4. Операция обмена реализуется с помощью оператора XOR (^).
  5. В каждой итерации внешнего цикла происходит смещение указателя ptr на размер одного элемента в байтах.
  6. Таким образом, после выполнения функции revarray, элементы массива будут перевернуты.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.778 из 5
Похожие ответы