Форум программистов, компьютерный форум 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)Написать...
bcc32+NetBeans 7.3.1 C++
Всем привет. Подскажите пожалуйста, как прикрутить компилятор bcc32 к IDE NetBeans 7.3.1 Компилятор скачивал с оффициального сайта Embarcadero. Проблема в том, что в средствах сборки для c/c++ его...
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",...
C++ Составить программу, которая определяет четыре объекта класса и выводит их на экран. Первый объект должен инициализироваться по умолчанию, второй ис Составить программу, которая определяет четыре объекта класса и выводит их на экран. Первый объект должен инициализироваться по умолчанию, второй использовать конструктор инициализации, третий -... подробнее

Показать сообщение отдельно
ShadowFirst
55 / 48 / 1
Регистрация: 31.10.2013
Сообщений: 161
11.02.2014, 10:26
Я не знаю читали вы то что было по ссылке или нет, возьму от туда пример и на примере вам покажу
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;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru