Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4

Как получить указатель на первый аргумент в функции типа void Fun(.){}?

17.08.2020, 22:37. Показов 1947. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Функция выглядит так void Fun(...){}. Сложность здесь заключается в том что здесь нет аргументов за который можно ухватиться чтобы получить адрес и сохранить в указатель. Если вы считаете что это невозможно то дайте материал для чтения в подтверждение этому.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.08.2020, 22:37
Ответы с готовыми решениями:

Указатель типа void на функцию, вызов функции
Необходимо с помощью указателя типа void запустить функцию. void func(int); int main(){ void *ptr_void; ptr_void=&func; ...

Указатель типа void. Использование косвенного связывания через универсальный указатель
Необходимо использовать косвенного связывания через универсальный указатель, примерный вид: struct обобщение{ключ; void* на что угодно}...

Ошибка: Аргумент типа void не завершён
#include <stdio.h> void swap (int *a, int *b) { int x; x=*a; *a=*b; *b=x; } void p (int n) { int i; ...

33
Злостный нарушитель
 Аватар для Verevkin
10263 / 5687 / 1266
Регистрация: 12.03.2015
Сообщений: 26,367
17.08.2020, 22:47
Цитата Сообщение от Nexi99 Посмотреть сообщение
чтобы получить адрес
адрес чего?
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
17.08.2020, 22:50  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
адрес чего?
Вызов
C++
1
2
int q=12;
Fun(q);
Теперь я поместил аргумент в функцию и мне нужно внутри функции взять указатель на этот аргумент q
0
Злостный нарушитель
 Аватар для Verevkin
10263 / 5687 / 1266
Регистрация: 12.03.2015
Сообщений: 26,367
17.08.2020, 22:53
Цитата Сообщение от Nexi99 Посмотреть сообщение
Теперь я поместил аргумент в функцию
Так бы и казал, что нужна верхушка стека, шоб аргументы вытащить. Это ж функция с переменным числом параметров, ёмаё.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
17.08.2020, 22:56  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Так бы и казал, что нужна верхушка стека, шоб аргументы вытащить. Это ж функция с переменным числом параметров, ёмаё.
Так в названии не поместиться всё это дело а точечки стёрлись. Да это крайний элемент стэка да он там один и будет но как его схватить?
0
Злостный нарушитель
 Аватар для Verevkin
10263 / 5687 / 1266
Регистрация: 12.03.2015
Сообщений: 26,367
17.08.2020, 23:01
Цитата Сообщение от Nexi99 Посмотреть сообщение
Да это крайний элемент стэка да он там один и будет но как его схватить?
Минимум один обязательный параметр должен иметь место быть.

Добавлено через 3 минуты
Кстати, у меня встречный вопрос: для решения какой задачи тебе это понадобилось?
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
17.08.2020, 23:01  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Минимум один обязательный параметр должен иметь место быть.
Ну я так и решил этот вопрос но вроде как не профессионально(хотя может это и нормально) тратить лишние байты на переменную. Возникает вопрос почему функция такой может быть Fun(...){} а схватить аргумент нельзя. Дайте ссылку на статью как это устроено и почему так?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
17.08.2020, 23:02
Законно - никак.
В C++ эта конструкция используется для SFINAE.
К слову, в языке C такое вовсе запрещено.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
17.08.2020, 23:06  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Кстати, у меня встречный вопрос: для решения какой задачи тебе это понадобилось?
Для того чтобы засунуть элемент любого типа в функцию, потому что функция одинаково будет работать с разными элементами и писать перегрузки не целесообразно.

Добавлено через 3 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Законно - никак.
В C++ эта конструкция используется для SFINAE.
К слову, в языке C такое вовсе запрещено.
Ну да подобное поддерживают не все языки. В Ассемблере аргументы вообще передаются отдельно, ну может не всегда и таких наворотов как макросы и подобное как в с++ там нет.
0
Злостный нарушитель
 Аватар для Verevkin
10263 / 5687 / 1266
Регистрация: 12.03.2015
Сообщений: 26,367
17.08.2020, 23:07
Кстати, у меня встречный вопрос: для решения какой задачи тебе это понадобилось?
Цитата Сообщение от Nexi99 Посмотреть сообщение
Дайте ссылку на статью как это устроено и почему так?
Тебя в гугле забанили? Ну, вот, например.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
17.08.2020, 23:14  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Тебя в гугле забанили? Ну, вот, например.
Про эти штуки я знаю я открывал тему про эти макросы, по ходу капать библиотеку нужно, тяжко это всё сделать самому поэтому и спрашиваю. Ладно ребята если никто ни чё не знает то что тут поделать.
0
Злостный нарушитель
 Аватар для Verevkin
10263 / 5687 / 1266
Регистрация: 12.03.2015
Сообщений: 26,367
17.08.2020, 23:17
Цитата Сообщение от Nexi99 Посмотреть сообщение
по ходу капать библиотеку нужно, тяжко это всё сделать самому
Удачного секса тебе, чувак.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
17.08.2020, 23:38
Цитата Сообщение от Nexi99 Посмотреть сообщение
Для того чтобы засунуть элемент любого типа в функцию, потому что функция одинаково будет работать с разными элементами и писать перегрузки не целесообразно.
Покажи спецификацию своей функции.
Это её описание, по которому те, кто будет вызывать твою функцию, поймут, зачем они её вызывают, и что она будет делать с параметрами, которые её передадут.

Не по теме:

Пример из API библиотеки, которая была под рукой:

Кликните здесь для просмотра всего текста

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*! @brief Creates a Vulkan surface for the specified window.
 *
 *  This function creates a Vulkan surface for the specified window.
 *
 *  If the Vulkan loader or at least one minimally functional ICD were not found,
 *  this function returns `VK_ERROR_INITIALIZATION_FAILED` and generates a @ref
 *  GLFW_API_UNAVAILABLE error.  Call @ref glfwVulkanSupported to check whether
 *  Vulkan is at least minimally available.
 *
 *  If the required window surface creation instance extensions are not
 *  available or if the specified instance was not created with these extensions
 *  enabled, this function returns `VK_ERROR_EXTENSION_NOT_PRESENT` and
 *  generates a @ref GLFW_API_UNAVAILABLE error.  Call @ref
 *  glfwGetRequiredInstanceExtensions to check what instance extensions are
 *  required.
 *
 *  The window surface cannot be shared with another API so the window must
 *  have been created with the [client api hint](@ref GLFW_CLIENT_API_attrib)
 *  set to `GLFW_NO_API` otherwise it generates a @ref GLFW_INVALID_VALUE error
 *  and returns `VK_ERROR_NATIVE_WINDOW_IN_USE_KHR`.
 *
 *  The window surface must be destroyed before the specified Vulkan instance.
 *  It is the responsibility of the caller to destroy the window surface.  GLFW
 *  does not destroy it for you.  Call `vkDestroySurfaceKHR` to destroy the
 *  surface.
 *
 *  @param[in] instance The Vulkan instance to create the surface in.
 *  @param[in] window The window to create the surface for.
 *  @param[in] allocator The allocator to use, or `NULL` to use the default
 *  allocator.
 *  @param[out] surface Where to store the handle of the surface.  This is set
 *  to `VK_NULL_HANDLE` if an error occurred.
 *  @return `VK_SUCCESS` if successful, or a Vulkan error code if an
 *  [error](@ref error_handling) occurred.
 *
 *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref
 *  GLFW_API_UNAVAILABLE, @ref GLFW_PLATFORM_ERROR and @ref GLFW_INVALID_VALUE
 *
 *  @remark If an error occurs before the creation call is made, GLFW returns
 *  the Vulkan error code most appropriate for the error.  Appropriate use of
 *  @ref glfwVulkanSupported and @ref glfwGetRequiredInstanceExtensions should
 *  eliminate almost all occurrences of these errors.
 *
 *  @remark @macos This function currently only supports the
 *  `VK_MVK_macos_surface` extension from MoltenVK.
 *
 *  @remark @macos This function creates and sets a `CAMetalLayer` instance for
 *  the window content view, which is required for MoltenVK to function.
 *
 *  @thread_safety This function may be called from any thread.  For
 *  synchronization details of Vulkan objects, see the Vulkan specification.
 *
 *  @sa @ref vulkan_surface
 *  @sa @ref glfwGetRequiredInstanceExtensions
 *
 *  @since Added in version 3.2.
 *
 *  @ingroup vulkan
 */
GLFWAPI VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface);

0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
17.08.2020, 23:48  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Покажи спецификацию своей функции.
Это её описание, по которому те, кто будет вызывать твою функцию, поймут, зачем они её вызывают, и что она будет делать с параметрами, которые её передадут.
Код внутри функции может быть каким угодно, основная идея в том чтобы функция принимала любой тип, любое значение, любой указатель, потому что ячейка памяти это набор бит и транслировать их с++ может как угодно и творить что угодно. Понятное дело что идея уже реализована и у неё 1000 способов её решения, но мне интересно сделать именно через функции типа Fun(...){/*хватаем адрес первого аргумента стэка как один из пользователей написал выше*/}
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
17.08.2020, 23:55
Цитата Сообщение от Nexi99 Посмотреть сообщение
Код внутри функции может быть каким угодно
Я разве про код спрашивал?
Я даже пример показал. Там нет кода функции, только описание и объявление.
Я спросил как мне, потенциальному пользователю твоей функции, понять, зачем её вызывать и что можно ей передать.
Цитата Сообщение от Nexi99 Посмотреть сообщение
основная идея в том чтобы функция принимала любой тип, любое значение, любой указатель
Основная идея - зачем мне вызывать эту функцию.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
18.08.2020, 00:02  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Я спросил как мне, потенциальному пользователю твоей функции, понять, зачем её вызывать и что можно ей передать.
Да что угодно передавай. Функция которая содержит точечки не требует указания типа и в этом вся соль, а внутри уже я буду приводить этот элемент к чему нужно. Тут походу было бы хорошо код показать, но тогда от меня никакого толку не будет, уж очень болезненно я к этому пришёл.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
18.08.2020, 00:06
Цитата Сообщение от Nexi99 Посмотреть сообщение
Да что угодно передавай.
Функция, которая принимает что угодно, сколько угодно и неизвестно что с этим делает...
Звучит интригующе. Как выпустишь свою библиотеку, поделись, я обязательно буду вставлять эту функцию в каждый проект и вызывать, что бы жить веселее
2
18.08.2020, 00:10

Не по теме:

Цитата Сообщение от zayats80888 Посмотреть сообщение
Функция, которая принимает что угодно, сколько угодно и неизвестно что с этим делает...
и при этом будет приводить элемент к чему нужно, мне кажется бесплатно такое не получить)

0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
18.08.2020, 00:14  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Функция, которая принимает что угодно, сколько угодно и неизвестно что с этим делает...
Звучит интригующе. Как выпустишь свою библиотеку, поделись, я обязательно буду вставлять эту функцию в каждый проект и вызывать, что бы жить веселее
А нахрена это типизирование, бывают ситуации когда тупо нужно передать последовательность бит/байт а не заморачиваться с тем какой там тип, а привести тип можно на месте, но к сожалению только такие функции могут помочь.
С вами бы стоило поделиться. Вы мне часто отвечали на вопросы. Мне пока не даётся метапраграмирование эта ерунда с кортежами, сейчас лето нет времени всё это переварить, зимой посмотрю если доживу.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
18.08.2020, 00:19
Цитата Сообщение от Nexi99 Посмотреть сообщение
передать последовательность бит/байт а не заморачиваться с тем какой там тип
void * как аргументы и как возврат, почему нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.08.2020, 00:19
Помогаю со студенческими работами здесь

Указатель массива как аргумент функции
Я прочитал несколько алгоритмов сортировки массивов, но не совсем понял, если массив чисел будет передан в аргумент функции через...

Указатель типа void c++
Haпример указатель типа void*ptr char *p void *ptr="abs"; p=((char *)ptr);Так указатель неопределённого типа, присваивается к...

Указатель типа void
Добрый день. enum Type { Double, Int, Float }; void func(int k,enum Type t,...) { void *pv; pv = (...); ... }

Как в аргумент функции передать указатель на метод класса?
Как в аргумент функции передать указатель на метод класса? Метод в классе у меня статический,все равно не получается(невозможно...

Указатель на функцию с аргументами, как аргумент другой функции
У меня есть некая функция, которая принимает как аргумент другую функцию typedef void(*func_type)(); start(func_type...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru