Приведение типа в "С" - C (СИ)
Формулировка задачи:
Покажите пожалуйста, на примерах с созданием собственных функций, прототипами к ним. Как выглядят явное и не явное приведение типов? Желательно на простейших программах , например сравнение трех чисел и вывод максимального. Для удобства написал готовый код с функцией и прототипом, который можете изменять, добавлять на свое усмотрение :
Цель, наглядно увидеть, что из себя представляет явное и не явное приведение типов.
include <stdio.h>
int maximum (int, int, int);
main ()
{
int a, b, c;
printf ("Enter three integers: ");
scanf ("%d%d%d", &a, &b, &c);
printf ("Maximum is: %d\n", maximum (a, b, c));
return 0;
}
int maximum (int x, int y, int z)
{
int max = x;
if (y > max)
max = y;
if (z > max)
max = z;
return max;
}Решение задачи: «Приведение типа в "С"»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
void * max3i(const void * a, const void * b, const void * c){
if ( *(int*)a > *(int*)b )
return ( *(int*)a > *(int*)c ) ? (void*)a : (void*)c;
else
return ( *(int*)b > *(int*)c ) ? (void*)b : (void*)c;
}
void * max3d(const void * a, const void * b, const void * c){
if ( *(double*)a > *(double*)b )
return ( *(double*)a > *(double*)c ) ? (void*)a : (void*)c;
else
return ( *(double*)b > *(double*)c ) ? (void*)b : (void*)c;
}
void * max3x(const void * a, const void * b, const void * c, void * (*func)(const void *, const void *, const void *)){
return func(a, b, c);
}
int main(void){
int iA, iB, iC;
double dA, dB, dC;
printf("3 int values: ");
if ( scanf("%d %d %d", &iA, &iB, &iC) != 3 ){
perror("scanf");
exit(EXIT_FAILURE);
}
printf("Maximum: %d\n", *(int*)max3x(&iA, &iB, &iC, max3i));
printf("\n3 double values: ");
if ( scanf("%lf %lf %lf", &dA, &dB, &dC) != 3 ){
perror("scanf");
exit(EXIT_FAILURE);
}
printf("Maximum: %.2f\n", *(double*)max3x(&dA, &dB, &dC, max3d));
exit(EXIT_SUCCESS);
}
Объяснение кода листинга программы
- Включение необходимых заголовочных файлов:
и . - Определение трех функций: max3i, max3d и max3x.
- Функция max3i сравнивает три значения типа int и возвращает наибольшее из них.
- Функция max3d сравнивает три значения типа double и возвращает наибольшее из них.
- Функция max3x принимает четыре аргумента: три значения и функцию, которая сравнивает эти значения.
- В функции main считываются три значения типа int и сохраняются в переменных iA, iB и iC.
- Вызывается функция max3x с аргументами iA, iB, iC и max3i.
- Выводится наибольшее значение из трех считанных.
- Считываются три значения типа double и сохраняются в переменных dA, dB и dC.
- Вызывается функция max3x с аргументами dA, dB, dC и max3d.
- Выводится наибольшее значение из трех считанных.
- Программа завершается с успехом (EXIT_SUCCESS).