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

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

17.08.2020, 22:37. Показов 2316. Ответов 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
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
18.08.2020, 00:21  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от AndryS1 Посмотреть сообщение
void * как аргументы и как возврат, почему нет?
а к воид где приводить снаружи функции, да и к тому же с воидом нельзя работать например если мне нужно присвоить что-то нейтрального типа то через воид это не сделаешь.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
18.08.2020, 00:30
Цитата Сообщение от Nexi99 Посмотреть сообщение
а к воид где приводить снаружи функции
ну да, если это проблема, стоит задуматься о том чтобы перестать программировать
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
struct foo
{
    int a = 2;
    char b[4]{ "123" };
};
 
struct bar
{
    double a = 4.0;
    float b = 23.f;
};
 
void fun(void* arg)
{
 
}
 
int main()
{
    foo a;
    bar b;
    fun((void*)(&a));
    fun((void*)(&b));
}
что не так в этом примере?
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
18.08.2020, 01:41  [ТС]
Цитата Сообщение от AndryS1 Посмотреть сообщение
что не так в этом примере?
Ребята успокойтесь, я так тоже делаю но можно этого не делать. Я так понял что никто не знает как взять адрес на аргумент если их как бы и нет а функция с точечками их предусматривает.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
18.08.2020, 01:50

Не по теме:

del



Добавлено через 4 минуты
Цитата Сообщение от Nexi99 Посмотреть сообщение
Я так понял что никто не знает как взять адрес на аргумент
Поскольку нет обычного способа этого сделать, предположу что это зависит от реализации, соответственно так лучше не делать
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
18.08.2020, 09:36
Цитата Сообщение от Nexi99 Посмотреть сообщение
Я так понял что никто не знает как взять адрес на аргумент если их как бы и нет а функция с точечками их предусматривает.
В рамках C++ это сделать невозможно.

Если вы закладываетесь на какую-то конкретную версию ABI, то адрес можно взять через ассемблерную вставку. Естественно конкретный способ будет зависеть от конкретного ABI.

Цитата Сообщение от Nexi99 Посмотреть сообщение
Я так понял что никто не знает
Перестаньте манипулировать сообществом.
0
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831
18.08.2020, 09:46
Цитата Сообщение от Nexi99 Посмотреть сообщение
Для того чтобы засунуть элемент любого типа в функцию, потому что функция одинаково будет работать с разными элементами и писать перегрузки не целесообразно.
В твоём мире шаблоны ещё не изобрели?
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
18.08.2020, 09:46
Цитата Сообщение от Nexi99 Посмотреть сообщение
Я так понял что никто не знает
Я ж тебе написал - никак. В C++ нет для этого стандартных средств.
https://en.cppreference.com/w/... _arguments
In the C programming language, at least one named parameter must appear before the ellipsis parameter, so printz(...); is not valid. In C++, this form is allowed even though the arguments passed to such function are not accessible, and is commonly used as the fallback overload in SFINAE, exploiting the lowest priority of the ellipsis conversion in overload resolution.
0
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831
18.08.2020, 09:49
Цитата Сообщение от Nexi99 Посмотреть сообщение
А нахрена это типизирование
Так может уйти на языки с менее строгой типизацией?
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
26.12.2021, 01:58  [ТС]
У меня работает такая схема https://www.cyberforum.ru/blog... g7155.html
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,417
26.12.2021, 09:32
Цитата Сообщение от Nexi99 Посмотреть сообщение
Функция выглядит так void Fun(...){}. Сложность здесь заключается в том что здесь нет аргументов за который можно ухватиться чтобы получить адрес и сохранить в указатель.
Зачем вообще "получать адрес и сохранять в указатель"? Зачем эти детали приведены в вопросе?

Цитата Сообщение от Nexi99 Посмотреть сообщение
Если вы считаете что это невозможно то дайте материал для чтения в подтверждение этому.
Это невозможно. Доступ к ... аргументам делается через макросы из <cstdarg>. Другого способа не существует. Макрос va_start требует наличия именнованного параметра.

Цитата Сообщение от Nexi99 Посмотреть сообщение
У меня работает такая схема
Она "работает" чисто случайно.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
26.12.2021, 19:35  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
va_start
Это зависит от реализации, может ещё и от процессора. Чисто случайно ничего работать не может.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Макрос va_start
не обязательно получить старт можно и самому если есть именованная переменная. А вот если её нет то тут сложнее.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,417
26.12.2021, 19:58
Цитата Сообщение от Nexi99 Посмотреть сообщение
Это зависит от реализации, может ещё и от процессора. Чисто случайно ничего работать не может.
Нет, в языке С++ это не зависит от реализации.

И "чисто случайным" является все, что находится за переделами вашего контроля.

Цитата Сообщение от Nexi99 Посмотреть сообщение
не обязательно получить старт можно и самому если есть именованная переменная. А вот если её нет то тут сложнее.
Нет, нельзя.

P.S. При чем здесь "процессор" я вообще не понял.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
26.12.2021, 20:30  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Нет, нельзя.
Можно потому что я делал, если есть первая переменная то вообще просто.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,417
26.12.2021, 20:36
Цитата Сообщение от Nexi99 Посмотреть сообщение
Можно потому что я делал
Прекрасно, но это ничего не значит. Это не более чем случайности. К языку С++ это все никакого отношения не имеет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.12.2021, 20:36

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

Указатель типа void c++
Haпример указатель типа void*ptr char *p void *ptr=&quot;abs&quot;; 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...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru