Как передать ссылку на элемент массива в функцию? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Программа должна ставить наооборот биты в каждом байте числа
#include "stdafx.h"
 
int Reverse(int n);
int Pow(int x,int y);
void ChangeBytes();
 
int main()
{
    ChangeBytes();
    //int x = Reverse(1);
//  printf("%d", x);
 
    return 0;
}
 
int Reverse(int n) {
    int result[32];
    int pow = 0;
    int number = 0;
    for (int i = 0; i < 32; i++) {
        int res = (n % 2 == 0) ? 0 : 1;
        result[i] = res;
        n /= 2;
    }
    
    for (int i = 0; i < 32; i += 8) {
        for (int j = 0; j < 8/2; j++) {
            int temp = result[i + j];
            result[i + j] = result[i + 7 - j];
            result[i + 7 - j] = temp;
        }
    }
 
    for (int i = 0; i < 32; i++) {
        if (result[i] == 1) {
            number = number + Pow(2,i);
        }
    }
 
    return number;
}
 
int Pow(int x,int y) {
    int result = x;
    if (y == 0) return 1;
    for (int i = 1; i < y; i++) {
        result *= x;
    }
    return result;
}

void ChangeBytes() {
    const int length = 5;
    int arr[5];

    for (int i = 0; i < length; i++) {
        printf("Enter number    %d  \n", i + 1);
        scanf("%d", &arr[i]);
        
    }
 
    for (int i = 0; i < length; i++) {
        Reverse(arr[i]);
    }
 
    for (int i = 0; i < length; i++)
        printf("Result is %d   \n", arr[i]);
}

Решение задачи: «Как передать ссылку на элемент массива в функцию?»

textual
Листинг программы
#include "stdafx.h"
 
int Reverse(int *n);
int Pow(int x,int y);
void ChangeBytes();
 
int main()
{
    ChangeBytes();
    //int x = Reverse(1);
//  printf("%d", x);
 
    return 0;
}
 
int Reverse(int *n) {
    int result[32];
    int pow = 0;
    int number = 0;
    for (int i = 0; i < 32; i++) {
        int res = (*n % 2 == 0) ? 0 : 1;
        result[i] = res;
        *n /= 2;
    }
    
    for (int i = 0; i < 32; i += 8) {
        for (int j = 0; j < 8/2; j++) {
            int temp = result[i + j];
            result[i + j] = result[i + 7 - j];
            result[i + 7 - j] = temp;
        }
    }
 
    for (int i = 0; i < 32; i++) {
        if (result[i] == 1) {
            number = number + Pow(2,i);
        }
    }
 
    return number;
}
 
int Pow(int x,int y) {
    int result = x;
    if (y == 0) return 1;
    for (int i = 1; i < y; i++) {
        result *= x;
    }
    return result;
}
 
 
void ChangeBytes() {
    const int length = 5;
    int arr[5];
 
 
    for (int i = 0; i < length; i++) {
        printf("Enter number    %d  \n", i + 1);
        scanf("%d", &arr[i]);
        
    }
 
    for (int i = 0; i < length; i++) {
        Reverse(&arr[i]);
    }
 
    for (int i = 0; i < length; i++)
        printf("Result is %d   \n", arr[i]);
}

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

  1. Включаем файл stdafx.h.
  2. Объявляем три функции: Reverse, Pow, ChangeBytes.
  3. Запускаем основную функцию main.
  4. В функции main вызываем функцию ChangeBytes.
  5. В функции ChangeBytes создаем массив arr длиной 5 и заполняем его значениями, введенными пользователем.
  6. В функции main вызываем функцию Reverse, передавая в нее указатель на первый элемент массива arr.
  7. В функции Reverse создаем массив result и переменные pow и number.
  8. В цикле перебираем элементы массива result, присваивая им значение 0 или 1 в зависимости от чётности текущего числа.
  9. В цикле перебираем элементы массива result, меняя местами четные и нечетные числа.
  10. В цикле перебираем элементы массива result, увеличивая число впереди на степень двойки, равную индексу элемента.
  11. Возвращаем полученное число.
  12. В функции main выводим на экран результаты работы функции Reverse.
  13. Завершаем основную функцию main.

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


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

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

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