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

Списки аргументов переменной длины, эти аргументы должны быть исключительно типа "int"? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Библиотека для распознавания изображений. Простая и быстрая. Подскажите пожалуйста http://www.cyberforum.ru/cpp-beginners/thread1093951.html
Добрый день. Возникла необходимость программно распознавать некие области на изображении. Суть в следующем: делается скрин экрана компьютера и необходимо на этом скрине найти расположение определенных элементов, надписей, кнопок и т.п.. Изображения кнопок все время будут одинаковые, шрифты надписей тоже, короче, все нужные для поиска области изображения всегда выглядят одинаково. Подскажите...
C++ Найти количество идеальных чисел в заданном диапазоне Находит количество идеальных чисел в заданном диапазоне. Идеальным называется число, равное сумме всех его делителей, не включая его самого (6 = 1 +2 +3) http://www.cyberforum.ru/cpp-beginners/thread1093909.html
C++ Найти максимальный из повторяющихся элементов двумерного массива
Есть три задачи, не могу разобраться, хоть убей. Буду крайне признателен если поможете. Заранее огромное спасибо. 1) Найти максимальный из повторяющихся элементов двумерного массива 2)Написать функцию (или макроопределение), которая находит угол тре-угольника по его сторонам. Написать функцию angles c переменным чис-лом параметров, которая находит углы n-угольника по заданным сторонам. Написать...
bcc32+NetBeans 7.3.1 C++
Всем привет. Подскажите пожалуйста, как прикрутить компилятор bcc32 к IDE NetBeans 7.3.1 Компилятор скачивал с оффициального сайта Embarcadero. Проблема в том, что в средствах сборки для c/c++ его нет, а при добавлении пишет, что наборы компиляторов не найдены. Нужно его вручную прикручивать как-то. ОС Win7.
C++ Как сделать указатель на массив http://www.cyberforum.ru/cpp-beginners/thread1093852.html
Здрасти. Как мне сделать указатель на массив: string stud= {{"49000", "Eddy", "Vedder", "dzienne", "19"}, {"49001", "Roger", "Waters", "wolny tok", "18"}, {"49002", "Jimmy", "Page", "dzienne", "20"}, {"49003", "Jim", "Morrison", "dzienne", "21"}, {"49004", "Jimi", "Hendrix", "dzienne", "19"}, {"49005", "Layne", "Staley", "dzienne", "17"}, {"49006", "Jerry", "Cantrell", "awans", "17"},...
C++ Составить программу, которая определяет четыре объекта класса и выводит их на экран. Первый объект должен инициализироваться по умолчанию, второй ис Составить программу, которая определяет четыре объекта класса и выводит их на экран. Первый объект должен инициализироваться по умолчанию, второй использовать конструктор инициализации, третий - преобразование типа своего параметра к типу своего класса, а четвертый - функцию ввода данных. Помогите пожалуйста. подробнее

Показать сообщение отдельно
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
11.02.2014, 10:26     Списки аргументов переменной длины, эти аргументы должны быть исключительно типа "int"?
Я не знаю читали вы то что было по ссылке или нет, возьму от туда пример и на примере вам покажу
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
#include <stdio.h>      /* printf */
#include <stdarg.h>     /* va_list, va_start, va_arg, va_end */
 
void PrintFloats (int n, ...)
{
  int i;
  double val;
  printf ("Printing floats:");
  va_list vl;
  va_start(vl,n);
  for (i=0;i<n;i++)
  {
    val=va_arg(vl,double);
    printf (" [%.2f]",val);
  }
  va_end(vl);
  printf ("\n");
}
 
int main ()
{
  PrintFloats (3,3.14159,2.71828,1.41421);
  return 0;
}
.

Вы обратили внимание на то как написана функция PrintFloats?
Мы передаем в нее количество параметров и потом сами параметры. Количество параметров у нас имеет тип int. А теперь посмотрим что у вас:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdarg.h>
 
int foo (char* k,...) {
  va_list ap;
  va_start (ap, k);
  char x= va_arg (ap, char);
  va_end (ap);
}
 
int main(){
    return 0;
}
А у вас в параметрах функции стоит указатель на char. Теперь смотрим интерфейс функции va_start:
void va_start (va_list ap, paramN);
И пройдемся по каждому параметру:
ap
Uninitialized object of type va_list.
After the call, it carries the information needed to retrieve the additional arguments using va_arg.
If ap has already been passed as first argument to a previous call to va_start or va_copy, it shall be passed to va_end before calling this function.

не вникая в суть того что там написано ясно что первым идет объект созданный от va_list. Тут все у вас нормально. Следующий параметр:
paramN
Name of the last named parameter in the function definition. The arguments extracted by subsequent calls to va_arg are those after paramN.
Вот здесь вот и и должно стаять количество параметров которые выряжаются типом int, а вот следом подавайте параметры типа char.

Короче если вам не понятно то что я написал то сделайте следующее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <stdarg.h>
 
int foo (int k,...) {
  va_list ap;
  va_start (ap, k);
  char x= va_arg (ap, char);
  va_end (ap);
}
 
int main(){
    foo (4,'A','B','C','D');
    return 0;
}
 
Текущее время: 10:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru