Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include "windows.h"
- /*Билет 17
- 1. Написать функцию с переменным кол-вом параметров (использовать бестиповой указатель).
- Найти сумму чисел int и float. Функция возвращает 2 полученные суммы */
- void** summ(int n,...);
- int main (void)
- {
- void** ms;
- ms = summ(4,'i',3,1,3,4,'f',2,2.5,3.5,'i',1,6,'f',1,2.2);
- printf("%d\n",*((int*)ms[0]) );
- printf("%.3lf\n",*((double*)ms[1]) );
- free(ms[1]);
- free(ms[2]);
- free(ms);
- system("pause");
- return 0;
- }
- void** summ(int n,...)
- {
- void** ms,*ptr;
- int* isumm,i;
- double* dsumm;
- ms = (void**)malloc(2 * sizeof(void*));
- isumm = (int*)calloc(1,sizeof(int));
- dsumm = (double*)calloc(1,sizeof(double));
- char c;
- ptr = &n;
- ptr = ((int*)ptr) + 1;
- while(n--)
- {
- c = *(char*)ptr;
- ptr = ((int*)ptr) + 1;
- switch(c)
- {
- case 'i':
- {
- i = *(int*)ptr;
- ptr = ((int*)ptr) + 1;
- for(int j = 0; j < i; j++)
- {
- isumm[0] += *(int*)ptr;
- ptr = ((int*)ptr) + 1;
- }
- break;
- }
- case 'f':
- {
- i = *(int*)ptr;
- ptr = ((int*)ptr) + 1;
- for(int j = 0; j < i; j++)
- {
- dsumm[0] += *(double*)ptr;
- ptr = ((double*)ptr) + 1;
- }
- break;
- }
- }
- }
- ms[0] = (void*)isumm;
- ms[1] = (void*)dsumm;
- return ms;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement