powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подскажите про передачу указателей в функции
6 сообщений из 6, страница 1 из 1
Подскажите про передачу указателей в функции
    #39089507
cpp2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В чём принципиальное отличие кода:
Код: plaintext
1.
2.
3.
void f(int k)
{
}



от

Код: plaintext
1.
2.
3.
void f(int *k)
{
}


?

А вообще вопрос у меня возник из-за передачи callback-функций. На stackoverflow вычитал статью про вызовы callback на c# из dll на с++.
Там в функцию на c++ передаётся указатель на делегат(функцию обратного вызова на c#) путём Marshal.GetFunctionPointerForDelegate(Delegate).

Но прототип функции на c++ объявлен как:
Код: plaintext
1.
void __stdcall F(StaticFunctionPointer oncallback)



Раз в эту функцию передаётся указатель, то почему тогда прототип принимающей функции не сделан с указателем
Код: plaintext
1.
void __stdcall F(StaticFunctionPointer *oncallback)


?
...
Рейтинг: 0 / 0
Подскажите про передачу указателей в функции
    #39089513
cpp2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё добавлю объявление типа для каллбак:
Код: plaintext
1.
typedef void (CALLBACK *StaticFunctionPointer)(...)



Т.е. сам тип уже является указателем и в случае с:
Код: plaintext
1.
void __stdcall F(StaticFunctionPointer *oncallback)


получится указатель на указатель ?
...
Рейтинг: 0 / 0
Подскажите про передачу указателей в функции
    #39089550
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpp2015Ещё добавлю объявление типа для каллбак:
Код: plaintext
1.
typedef void (CALLBACK *StaticFunctionPointer)(...)



Т.е. сам тип уже является указателем и в случае с:
Код: plaintext
1.
void __stdcall F(StaticFunctionPointer *oncallback)


получится указатель на указатель ?да, верно рассуждаешь ))
...
Рейтинг: 0 / 0
Подскажите про передачу указателей в функции
    #39089656
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpp2015В чём принципиальное отличие кода:

в том, чем заполняется регистр EAX -- значением переменной или её адресом.

cpp2015Раз в эту функцию передаётся указатель, то почему тогда прототип принимающей функции не сделан с указателем
Код: plaintext
1.
void __stdcall F(StaticFunctionPointer *oncallback)


?
потому, что тип StaticFunctionPointer сам по себе указатель, что и отражено в его названии.
...
Рейтинг: 0 / 0
Подскажите про передачу указателей в функции
    #39089671
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpp2015В чём принципиальное отличие кода:
Код: plaintext
1.
2.
3.
void f(int k)
{
}



от

Код: plaintext
1.
2.
3.
void f(int *k)
{
}


?


Принципиальное отличие в том, что переменную, которая будет передана внутрь функции f во втором случае (при передаче по указателю) можно будет изменить внутри этой функции, и это изменение будет применено к переменной, педеданной в
функцию. В первом случае такого не будет, все изменения переменной k останутся только внутри этой функции f.



cpp2015А вообще вопрос у меня возник из-за передачи callback-функций. На stackoverflow вычитал статью про вызовы callback на c# из dll на с++.
Там в функцию на c++ передаётся указатель на делегат(функцию обратного вызова на c#) путём Marshal.GetFunctionPointerForDelegate(Delegate).

Но прототип функции на c++ объявлен как:
Код: plaintext
1.
void __stdcall F(StaticFunctionPointer oncallback)



Раз в эту функцию передаётся указатель, то почему тогда прототип принимающей функции не сделан с указателем
Код: plaintext
1.
void __stdcall F(StaticFunctionPointer *oncallback)


?


Потому что в С и С++ указатель на фукнцию и функция -- это один и тот же тип данных.
Функция и её адрес -- это одно и то же.
...
Рейтинг: 0 / 0
Подскажите про передачу указателей в функции
    #39089758
cpp2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за ответы
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подскажите про передачу указателей в функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]