Как передать ссылку на элемент массива в функцию? - 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]);
}
Объяснение кода листинга программы
- Включаем файл
stdafx.h. - Объявляем три функции: Reverse, Pow, ChangeBytes.
- Запускаем основную функцию main.
- В функции main вызываем функцию ChangeBytes.
- В функции ChangeBytes создаем массив arr длиной 5 и заполняем его значениями, введенными пользователем.
- В функции main вызываем функцию Reverse, передавая в нее указатель на первый элемент массива arr.
- В функции Reverse создаем массив result и переменные pow и number.
- В цикле перебираем элементы массива result, присваивая им значение 0 или 1 в зависимости от чётности текущего числа.
- В цикле перебираем элементы массива result, меняя местами четные и нечетные числа.
- В цикле перебираем элементы массива result, увеличивая число впереди на степень двойки, равную индексу элемента.
- Возвращаем полученное число.
- В функции main выводим на экран результаты работы функции Reverse.
- Завершаем основную функцию main.