Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,230
Завершенные тесты: 1
#1

параметры фунции - C++

19.12.2009, 23:21. Просмотров 487. Ответов 7
Метки нет (Все метки)

вот у меня возник вопрос,например фунция printf,сколько имеет параметров?
может у меня такой код
C++
1
printf("%d, %d, %d, %d, %d", 10,11,12,13,14);
или же может у меня код такой
C++
1
printf("hello");
то есть почему в некоторых функциях в момент вызова можно не написать все параметры,а у меня когда я пишу функции с двумяпараметрами то надо объязательно использовать 2?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2009, 23:21     параметры фунции
Посмотрите здесь:

Ссылка на элементы фунции мэин , в дополнительной фунции - C++
Вот собственно код . #include <iostream> #include <vector> using namespace std; void dfs(int i) { ...

Фунции на С. - C++
Здравствуйте! Помогите пожалуйста написать программу на Си.Написать и протестировать функцию, которая по заданному натуральному числу...

Фунции-процедуры. - C++
Якось не зручно у Вас ще раз просити допомоги, але попалась для мого мозга заскладна програма: Оформити обчислення значення інтегральної...

Поиск в фунции - C++
Я решила написать поиск минимального в функции с указателями: так у меня работает: int minVal(int a, int b) { int min = a; if...

Двумерный массив и фунции - C++
Нужно передать двумерний массив с одного класса в другой. Об'явление: int matrixBusyCells; Создаю метод для его передачи: ...

Вычислить значение фунции - C++
Здравствуйте! Условие задачи: Пусть, например, дана ф-ция f = a{x}^{2}+bx+c, где a, b, c -действительные числа. Ф-ция f должна...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
19.12.2009, 23:41     параметры фунции #2
наверное там константы стоят, они изменяются, когда передавать значение, а printf юзает ссылки на переменные, следовательно пытаються делать операции с сылками со значением 0, что критично..
лучше будет если вы почитаете соответствующую литературу..
Nick Alte
Эксперт С++
1607 / 999 / 118
Регистрация: 27.09.2009
Сообщений: 1,926
Завершенные тесты: 1
20.12.2009, 00:13     параметры фунции #3
Функция printf определена как int printf(const char* format, ...); , то есть, имеет переменное число аргументов: строка формата обязательна, а дальше можно передавать сколько хочешь. Если ты передашь больше, чем нужно, ненужные значения будут проигнорированы. Если передашь меньше, printf всё равно возьмёт нужные значения со стека, но это будет неизвестно что (скорее всего, локальные переменные вызвавшей функции). Переменное число параметров - вещь удобная, но опасная, поскольку ошибки выявляются только во время исполнения. Функция printf только читает переданные ей данные, поэтому максимальный риск заключается в том, что выведется неправильный текст (в случае с %s это может быть довольно большое количество неправильного текста) или будет попытка чтения из запрещённых областей памяти, что приведёт к аварийному останову программы. scanf пишет в память, поэтому к ассортименту добавляются такие эзотерические вещи, как изменение произвольных участков в памяти, включая любые переменные любых функций, разрушение программного кода и другие весёлые штукесы.
Вдохновившись этими блистательными перспективами, новичок может спросить: "А что, эти функции такие уникальные? Или я тоже могу писать свои функции с переменным числом аргументов?" Ответ - да, можете. Смотрите хелп по stdarg.h и макросам va_list и va_arg. Помимо самих аргументов, вам придётся как-то определять их тип и количество (printf делает это по строке формата).
Второй вопрос, связанный с этой темой - "а могу ли я написать функцию с переменным числом аргументов, которая передаёт их в другую функцию с переменным числом аргументов, например, тому же printf?" Ответ - можно, но не напрямую. Такой функции надо будет уже передавать сам va_list. Самому printf такое уже не передашь, но специально для этих целей есть vprintf.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.12.2009, 00:21     параметры фунции #4
Цитата Сообщение от МедведЪ Посмотреть сообщение
фунция printf,сколько имеет параметров?
она имеет всего один аргумент. остальные это алиасы. Тут описано: http://www.citforum.ru/programming/c/h15.shtml

а конечное кол-во допустимых для использования формальных аргументов зависит от компилятора и реализации CRT, и еще от чего-то, не помню)
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,230
Завершенные тесты: 1
20.12.2009, 13:32  [ТС]     параметры фунции #5
Nick Alte, приведите пожалуйста пример с va_list
Nick Alte
Эксперт С++
1607 / 999 / 118
Регистрация: 27.09.2009
Сообщений: 1,926
Завершенные тесты: 1
20.12.2009, 14:01     параметры фунции #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdarg.h>
 
double maxd(int amount, ...)
{
    va_list args;
    va_start(args, amount);
    double maxval = va_arg(args, double);
    for(int i=1; i<amount; ++i)
    {
        double nextval = va_arg(args, double);
        if(nextval>maxval)
            maxval = nextval;
    }
    return maxval;
}
 
 
int main()
{
    printf("%f\n", maxd(3, 3.1, 6.2, 2.3));
    printf("%f\n", maxd(5, 3.1, 4.2, 1.3, 5.4, 0.5));
}
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,230
Завершенные тесты: 1
20.12.2009, 14:02  [ТС]     параметры фунции #7
а с коментами можно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2009, 14:10     параметры фунции
Еще ссылки по теме:

Фунции sin и cos - C++
Здравствуйте. Начал писать игру, аналог знаменитых Tank Wars. При использовании библиотечных(math.h) функций sin и cos появилась...

Вызов шаблонной фунции - C++
T pow (int T, int n_) { if (!n_) return 1; T x = x_ ; int n = n_; do { n--; x *= x;

Как вернуть значение из фунции в переменную - C++
У меня так получается, что ввод в фу-ции не осуществляется. То есть a=0 b=0 c=0, так это и остаётся, cin в фу-ции вообще не дзаносит...

Найти макисмальное значение фунции в интервале от 9 до 11 - C++
Сам разбираюсь в паскале. Пытался разобраться в с++ но пока очень печально получается. ) Надо сделать 2 программы в консольном...


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

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1607 / 999 / 118
Регистрация: 27.09.2009
Сообщений: 1,926
Завершенные тесты: 1
20.12.2009, 14:10     параметры фунции #8
вот это скорость...
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
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
// Подключаем заголовок для работы с переменным числом аргументов
#include <stdarg.h>
 
// Объявляем функцию для поиска максимума на переменном количестве аргументов типа double
// Количество аргументов передаём явно, в amount
// Переменное количество аргументов обозначаем троеточием (которое называется эллипсис).
double maxd(int amount, ...)
{
// Указатель на очередной аргумент
    va_list args;
// Инициализируем этот указатель, передав в макрос последний именованный аргумент
    va_start(args, amount);
// Извлекаем первый неименованный аргумент для инициализации текущего максимума
// Здесь есть натяжка: не проверяется, передан ли хоть один аргумент. Это для простоты.
// По-хорошему, функцию надо было объявлять как double maxd(int amount, double val1, ...)
// и проверять amount.
// При извлечении аргумента значение указателя args обновляется. Если нам нужно снова
// извлекать значения, надо снова установить его через va_start
    double maxval = va_arg(args, double);
    for(int i=1; i<amount; ++i)
    {
// В цикле последовательно извлекаем значения неименованных аргументов и определяем максимум.
        double nextval = va_arg(args, double);
        if(nextval>maxval)
            maxval = nextval;
    }
    return maxval;
}
 
int main()
{
// Проверяем работу функции с 3 и 5 значениями
    printf("%f\n", maxd(3, 3.1, 6.2, 2.3));
    printf("%f\n", maxd(5, 3.1, 4.2, 1.3, 5.4, 0.5));
}
Yandex
Объявления
20.12.2009, 14:10     параметры фунции
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru