![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| LuckLess |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 15.9.2004 Репутация: 1 Всего: 1 |
Есть функция , которая принимает переменное количество аргументов...
когда ее вызываешь 1-ый раз , она генерит число. Это число означает , какое количество параметров , начинающихся с 1 и последовательно увеличивающихся на 1 ей нада передать чтобы она вернула 1:) задача : можно ли узнать это сгенерированное число используя только С. Я решил задачу , но использую ассемблер немнога...
Это сообщение отредактировал(а) LuckLess - 21.1.2005, 12:41 |
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: 9 Всего: 71 |
|
|||
|
||||
| LuckLess |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 15.9.2004 Репутация: 1 Всего: 1 |
т.е. функция генерит случайное число ,
есло оно 5 то ее нада вызвать funnyfunc(1,2,3,4,5) чтобы она вернула 1 если число - 9 то funnyfunc(1,2,3,4,5,6,7,8,9)... |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
ARGC, ARGV
Например функции printf, scanf |
|||
|
||||
| LuckLess |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 15.9.2004 Репутация: 1 Всего: 1 |
DENNN
поясни плз.. |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Сорри. Объяснение такое сумбурное что я решил ты про функции с переменным числом аргументов не знаешь.
|
|||
|
||||
| Unknown_Error |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 3.1.2005 Репутация: нет Всего: нет |
Хм... хорошая задачка
Первое, что приходит в голову, так это создать дин. массив и передавать в функцию указатель, вместо переменного кол-ва параметров. |
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: 9 Всего: 71 |
LuckLess я так и не понял твоей задачи. Тебе нужно узнать, сколько параметров передано в функцию?
|
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Нет. Ему нужно динамически формировать количество параметров.
То есть на этапе компиляции количество параметров функции не известно. Мне тоже в голову не приходит ничего кроме передачи указателя динамического массива. Фактически тогда не нужна функция с переменным числом аргументов. |
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: 9 Всего: 71 |
НУ так то да. Более правильно будет принимать указатель на параметры и их количество...
|
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Вот, такое есть
|
|||
|
||||
| LuckLess |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 15.9.2004 Репутация: 1 Всего: 1 |
Это ясно , что можно принимать указатель на пераметры , и их количество , и что так правильно делать , но хотелось бы понять , возможно ли както решить задачу именно с этой функцией.
Моэно ли получить регистр стека , потом записать по адресам , полученным из регистра стека нужные значения , а потом вызвать функцию.. пару вопросов : 1) регистр стека - SS , но он указывает на начало стека , а где храниться смещение ?? 2) можно ли его(смещение) изменять самому? если да то тогда можно записапть в стек 2,3,4, сдвинуть смещение на 3 , и вызвать funnyfunc(1) , и тогда можно будет динамически подбирать нужое кол-во параметров... |
|||
|
||||
| Unknown_Error |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 3.1.2005 Репутация: нет Всего: нет |
Да, ты можешь получить адрес первого передаваемого элемента в функцию с помощью взятия адреса "&"
Это сообщение отредактировал(а) Unknown_Error - 23.1.2005, 12:24 |
||||
|
|||||
| LuckLess |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 15.9.2004 Репутация: 1 Всего: 1 |
Unknown_Error
да ты не понял... хочу сделать чтото вроде ...
и это будет тоже самое ,что еслиб я просто вызвал funnyfunc(1,2,3,4); тока не знаю как реализовать строчки int a=hz; и hz-=3; ... Это сообщение отредактировал(а) LuckLess - 23.1.2005, 23:18 |
|||
|
||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
если честно, мало что пняла. но тчно знаю можно без асемдлер.
Если надо узнать сколько раз вызывалась фунция. используем статическую переменную Если надо передавать переменное число параметров то используем ... Если число параметров сопределяется во время исполнения, то динамический массив указаетлей. Если при этом параметры раного типа, то массив указателей на void -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |