Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
1

Функция с переменным числом параметров

01.10.2015, 13:07. Показов 1397. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача посчитать сокрытые сумму сокрытых аргументов ф-ции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
#include<conio.h>
#include<stdarg.h>
using namespace std;
double Summa(int a,int n,...);
int main()
{
    cout<<Summa(5,7,1.0,2.0,3.0,4.0,5.0);
//    getch();
    return 0;
}
double Summa(int a, int n, ...){
    int summ=0;
    int *ptr = &n;
    ++ptr;
 
    cout<<*ptr<<endl;
    double*q;
    *q=static_cast<double>(*ptr);//сдесечки я делаю что то решительно не так(((
 
 
 
 
    return summ;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2015, 13:07
Ответы с готовыми решениями:

Функция с переменным числом параметров, как узнать кличество переданных параметров?
Добрый вечер, можно не использовать int n, а каким то другим способом узнать количество переданных...

Функция с переменным числом параметров находящая максимальный элемент в списке параметров
Написать функцию с переменным числом параметров:Максимальный из элементов в списке параметров,...

Функция с переменным числом параметров
В функцию с переменным числом параметров поступают символы, конец списка - ноль-символ '\ 0'. Найти...

В функция с переменным числом параметров.
В функцию с переменным числом параметров поступают слова, конец списка - указатель NULL. Найти и...

15
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
01.10.2015, 13:18 2
Цитата Сообщение от anti-k Посмотреть сообщение
//сдесечки я делаю что то решительно не так(((
va_arg
0
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
01.10.2015, 13:20  [ТС] 3
Enno, Согласен, можно и так, но хочу именно указателями, почему ptr не каститься???
0
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
01.10.2015, 13:24 4
Цитата Сообщение от anti-k Посмотреть сообщение
но хочу именно указателями
Переписывать макросы один в один?
Цитата Сообщение от anti-k Посмотреть сообщение
почему ptr не каститься???
Потому что double не родня int'у. Используй явное приведение к типу.
0
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
01.10.2015, 13:27  [ТС] 5
Enno, Куда уж явнее чем static_cast? НЕ могли бы ли вы примерчик в строчечку, пожалуйста. А с макросами я уже сделал)) надо еще с указателями доделать )))
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
01.10.2015, 13:36 6
Лучший ответ Сообщение было отмечено anti-k как решение

Решение

Цитата Сообщение от anti-k Посмотреть сообщение
сдесечки я делаю что то решительно не так(((
Конечно не так. Ты разименовываешь неинициализированный указатель.

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
void foo( int i, ... ) {
    intptr_t * p = reinterpret_cast<intptr_t *>(&i);
    for ( ; *p; p++ ) {
        std::cout << *(int *)p << std::endl;
    }
}
 
int main() {
    foo( 100, 200, 300, 0 );
}
Попробуй по этому примеру.
1
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
01.10.2015, 13:39  [ТС] 7
castaway, Спасибо!!! Сейчас буду разбираться!!!
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
01.10.2015, 13:40 8
Лучший ответ Сообщение было отмечено anti-k как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
double foo( int n, ... ) {
    double * p = reinterpret_cast<double *>(&n + 1);
    double s = 0;
    while ( n-- ) {
        s += *p++;
    }
    return s;
}
 
int main() {
    std::cout << foo( 3, 100., 200., 300. ) << std::endl;
}
1
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
01.10.2015, 13:49  [ТС] 9
castaway, Это чудо, когда вы онлайн, праздник ))) На сколько я понял с MDSN, reiterpret_cast направлен на работу с указателями? Что бы серьезней разобраться , нужно время... а потом вас увы не будет онлайн((
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
01.10.2015, 13:54 10
Цитата Сообщение от anti-k Посмотреть сообщение
reiterpret_cast направлен на работу с указателями?
Не только.
Его можно заменить на:
C++
1
    double * p = (double *)(&n + 1);
Если так тебе будет легче понять.
0
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
01.10.2015, 13:58  [ТС] 11
castaway, Если сделать префиксный инкримент,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
double foo( int n, ... ) {
    double * p = reinterpret_cast<double *>(&n + 1);
    double s = 0;
    while ( n-- ) {
        s += ++*p;
    }
    return s;
}
 
int main() {
    std::cout << foo( 3, 100., 200., 300. ) << std::endl;
}
отает 6!!!! Как оно считает???? С потфиксом вообще мусор((
0
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
01.10.2015, 14:00 12
Цитата Сообщение от anti-k Посмотреть сообщение
Куда уж явнее чем static_cast? НЕ могли бы ли вы примерчик в строчечку, пожалуйста.
Вот тебе примерчик строчечка, юзерчик:
C++
1
double* varvarvar = (double*)some_pointer;
1
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
01.10.2015, 14:01 13
Цитата Сообщение от anti-k Посмотреть сообщение
отает 6!!!! Как оно считает???? С потфиксом вообще мусор((
Поэтому и не надо писать это собственноручно, а использовать va_arg. У меня код из 8-го сообщения работает правильно.
1
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
01.10.2015, 14:12  [ТС] 14
castaway, В визуал все работает!!!! Спасибо!!!

Добавлено через 2 минуты
castaway, С макорсами действительно вроде бы проще, но как то опасаюсь я их ))
0
Barrent
01.10.2015, 14:13
  #15

Не по теме:

А для каких целей вообще используется переменное число параметров? Не проще ли в массив упаковать?

0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
01.10.2015, 14:19 16
Barrent, например.

Цитата Сообщение от anti-k Посмотреть сообщение
С макорсами действительно вроде бы проще, но как то опасаюсь я их ))
Вот их то в данном случае и не надо опасаться.
2
01.10.2015, 14:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2015, 14:19
Помогаю со студенческими работами здесь

Функция с переменным числом параметров
Доброе время суток! Решил навести красивость в функции что бы по мимо возврата хеш суммы она еще...

Функция с переменным числом параметров
Функция с переменным числом параметров. Задание: Среднее арифметическое с елементов в списке...

Функция с переменным числом параметров
хелп ми вообще дуб дубом Задание Функция с переменным числом параметров Конкретное задание...

Функция с переменным числом параметров
Нам нужна очень конкретная функция, и мы нуждаемся в ней как можно скорее. Вот как мы это себе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru