Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подскажите про передачу указателей в функции / 6 сообщений из 6, страница 1 из 1
29.10.2015, 08:54
    #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
29.10.2015, 09:03
    #39089513
cpp2015
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите про передачу указателей в функции
Ещё добавлю объявление типа для каллбак:
Код: plaintext
1.
typedef void (CALLBACK *StaticFunctionPointer)(...)



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


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



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


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

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

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


?
потому, что тип StaticFunctionPointer сам по себе указатель, что и отражено в его названии.
...
Рейтинг: 0 / 0
29.10.2015, 10:44
    #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
29.10.2015, 11:22
    #39089758
cpp2015
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите про передачу указателей в функции
Всем спасибо за ответы
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подскажите про передачу указателей в функции / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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