С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Extro
0 / 0 / 0
Регистрация: 11.06.2012
Сообщений: 31
#1

Функция с переменным числом параметров. Преобразование типов - C++

19.04.2014, 11:48. Просмотров 356. Ответов 7
Метки нет (Все метки)

Добрый день.
Проходил недавно тест на собеседовании, довольно странный, на мой взгляд, был вопрос:

Есть функция
void f(const char* txt, ...);

Аргумент, переданный в функция, типа float будет преобразован в:
1) void*.
2) char*.
3) char.
4) double.
5) int.

Мне кажется, что вопрос не корректен, потому что первый аргумент не может быть не *char, а последующие аргументы - это адреса в памяти, где хранятся значения аргументов.
Как ваше мнение? Какой ответ нужно было выбрать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2014, 11:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция с переменным числом параметров. Преобразование типов (C++):

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

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

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

Функция с переменным числом параметров - C++
Написать функцию sum с переменным числом параметров, которая находит сумму заданных обыкновенных дробей. Написать вызывающую функцию main,...

Функция с переменным числом параметров - C++
Написать функцию с переменным числом параметров, которая определяет количество чисел, являющихся точными квадратами (2, 4, 9, 16,. . . )...

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

7
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
19.04.2014, 12:16 #2
Цитата Сообщение от Extro Посмотреть сообщение
Мне кажется, что вопрос не корректен, потому что первый аргумент не может быть не *char, а последующие аргументы - это адреса в памяти, где хранятся значения аргументов.
Как ваше мнение? Какой ответ нужно было выбрать?
А вот хз как этот макрос там реализован... Но что-то я больше всего склоняюсь что к char*, т.к. это наименьтый тип данных и следовательно из него можно привести в любой другой тип.
0
Extro
0 / 0 / 0
Регистрация: 11.06.2012
Сообщений: 31
19.04.2014, 13:14  [ТС] #3
А как на счет void*?
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.04.2014, 15:57 #4
Extro, ну и как шагать по стеку агрумантов функции с типом void?

Добавлено через 23 часа 14 минут
Цитата Сообщение от Extro Посмотреть сообщение
А как на счет void*?
Я не заметил, что const char* txt - это первый аргумент и он ни куда конвертироваться не должен...
0
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
20.04.2014, 17:31 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
В вопросе нет ничего странного, просто он предполагает знание того, как реализуется вызов функций и передача параметров. Как вообще, так и в случае переменного количества аргументов. Верный ответ - четвёртый, double.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
20.04.2014, 19:20 #6
Nick Alte, в случае эллипсиса понятно: http://stackoverflow.com/questions/1...ork-with-float
Но в общем случае, с чего бы в функции:
C++
1
void f( float a );
Аргументу преобразовываться в double?
1
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
20.04.2014, 19:33 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Tulosba Посмотреть сообщение
Но в общем случае, с чего бы
В исходном вопросе речь идёт как раз про функцию с эллипсисом. Об "общем случае" там и речи не идёт. А то можно, конечно, расширить подход и рассмотреть, например, Фортран с его вещественными числами с настраиваемой точностью. Вот только зачем? Спрашивают - отвечаем. Если придирка к моим словам о том, что надо знать о реализации вызовов вообще, то они вовсе не означают, что float преобразуется всегда, в виду имелся сам принцип передачи параметров на стеке и его очистки.
Кстати, о птичках. Нередко бывает, что в вычислениях float неявно "повышается" до double, что изредка может привести к занятным эффектам.
1
Extro
0 / 0 / 0
Регистрация: 11.06.2012
Сообщений: 31
21.04.2014, 12:04  [ТС] #8
Nick Alte, спасибо за ответ, ваши знания впечатляют.
0
21.04.2014, 12:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2014, 12:04
Привет! Вот еще темы с ответами:

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

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

Функция с переменным числом параметров - C++
Задача посчитать сокрытые сумму сокрытых аргументов ф-ции. #include<iostream> #include<conio.h> #include<stdarg.h> using namespace...

Функция с переменным числом параметров Va_arg - C++
Нужно посчитать количество слов в каждой строке ... va_arg(arg_list , char) не переключает на другой параметр , я не могу обработать...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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