реклама на сайте
подробности

 
 
> Вопрос по C-шным указателям
PhX
сообщение Mar 23 2008, 18:32
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249



Программирую под 2812. В библиотеках от TI очень часто встречается следующая конструкция

Код
Module.h
typedef struct module_data {
int in, pastIn ,result; // Persistent data, coefficients etc.
void (*calc)() // Pointer to calculation function
} MODULE;
#define MODULE_DEFAULTS { 0,0,0, (void (*)(Uint32))module_calc }

Module.c
void module_calc(MODULE *p)
{
// compute code
p->result = p->pastIn+p->In;
p->pastIn = p->In;
}


Код
Client.c
MODULE mod = MODULE_DEFAULTS;
void somefunc(void)
{
int foo;
mod.in = 10; // coefficient configuration
mod.calc(&mod);
foo = mod.result; // Use result
}


Спрашивается по какой логике работает компилятор когда указателю типа
void (*calc)()
присваевается
(void (*)(Uint32))module_calc ?
И вообще как можно человеческим языком описать конструкцию:
(void (*)(Uint32))module_calc ?


--------------------
Если все, то не я...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Mar 23 2008, 20:35
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



(void (*)(Uint32))module_calc; - это приведение module_calc к указателю на функцию типа void func(Uint32 arg).
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Mar 23 2008, 21:14
Сообщение #3


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(aaarrr @ Mar 23 2008, 22:35) *
(void (*)(Uint32))module_calc; - это приведение module_calc к указателю на функцию типа void func(Uint32 arg).

smile3046.gif точно!


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th August 2025 - 07:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01358 секунд с 7
ELECTRONIX ©2004-2016