Например TDA7294

Форум РадиоКот • Просмотр темы - Указатели на функцию в массиве
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт янв 23, 2026 10:13:54

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Указатели на функцию в массиве
СообщениеДобавлено: Ср июл 15, 2015 08:54:13 
Грызет канифоль

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пт мар 20, 2009 12:25:47
Сообщений: 289
Откуда: Ivanovo
Рейтинг сообщения: 0
Можно ли хранить указатели на функцию в массиве и вызывать функцию по номеру элемента в массиве?

например, есть функции a1(), a2(), a3()
и массив mas из трёх элементов
и в зависимости от того, к какому элементу массива мы обращаемся - вызывать определенную функцию


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Указатели на функцию в массиве
СообщениеДобавлено: Ср июл 15, 2015 09:57:47 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2135
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18454
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
язык Си это не запрещает - делайте и пользуйтесь.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Указатели на функцию в массиве
СообщениеДобавлено: Ср июл 15, 2015 10:10:00 
Грызет канифоль

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пт мар 20, 2009 12:25:47
Сообщений: 289
Откуда: Ivanovo
Рейтинг сообщения: 0
а как?

можно пример кода?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Указатели на функцию в массиве
СообщениеДобавлено: Ср июл 15, 2015 10:23:26 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2135
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18454
Откуда: Новочеркасск
Рейтинг сообщения: 1
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Код:
typedef void (*func_ptr)(void); // описали тип "указатель на функцию"

// определили функции
static void f1(void){
   ...
}

static void f2(void){
   ...
}

// определили массив из указателей на эти функции
static func_ptr farr[2] = {f1, f2};

// пользуемся
farr[0](); // вызываем ф-ю f1

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Указатели на функцию в массиве
СообщениеДобавлено: Ср июл 15, 2015 10:37:03 
Грызет канифоль

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пт мар 20, 2009 12:25:47
Сообщений: 289
Откуда: Ivanovo
Рейтинг сообщения: 0
огромное спасибо!

а если нужно параметр передать функции?
static void f2( параметр ){
...
}

farr[0](параметр)?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Указатели на функцию в массиве
СообщениеДобавлено: Ср июл 15, 2015 10:48:31 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2135
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18454
Откуда: Новочеркасск
Рейтинг сообщения: 1
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
тип и параметры функции у вас обязаны совпадать с типом указателя. нужны функции с параметром - изменяйте typedef соответствующим образом, например для 1-го параметра типа int будет так:
Код:
typedef void (*func_ptr)(int);


ни в коем случае не пихайте в массив "несовместимые" по типу и параметрам функции! по правилам Си вы получите только предупреждение, проект скомпилируется, но последствия будут печальными...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Указатели на функцию в массиве
СообщениеДобавлено: Ср июл 15, 2015 10:54:14 
Грызет канифоль

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пт мар 20, 2009 12:25:47
Сообщений: 289
Откуда: Ivanovo
Рейтинг сообщения: 0
мне нужно передать ТОЛЬКО unsigned char
несколько разных функций, но все они получают только один unsigned char


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Указатели на функцию в массиве
СообщениеДобавлено: Ср июл 15, 2015 11:25:02 
Грызет канифоль

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пт мар 20, 2009 12:25:47
Сообщений: 289
Откуда: Ivanovo
Рейтинг сообщения: 0
Код:
typedef void (*func_ptr)(void); // описали тип "указатель на функцию"

static void nf(unsigned char x){}
static void fu(unsigned char x){}
static void fd(unsigned char x){}
static void fl(unsigned char x){}
static void fr(unsigned char x){}

static func_ptr farr[4] = {fu(0),fd(0),fl(0),fr(0)};


HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode) V9.82

Error at file ../mn.c line 22 column 33: (188) constant expression required
Error at file ../mn.c line 22 column 33: (206) illegal use of void expression
Error at file ../mn.c line 22 column 33: (182) illegal conversion between types
??? -> pointer to function with no arguments returning ???
Error at file ../mn.c line 22 column 33: (181) non-scalar types can't be converted to other types
Error at file ../mn.c line 22 column 39: (188) constant expression required
make: *** [mn.p1] Error 1


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Указатели на функцию в массиве
СообщениеДобавлено: Ср июл 15, 2015 11:29:33 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2135
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18454
Откуда: Новочеркасск
Рейтинг сообщения: 1
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
давайте поиграем в "найди 10 отличий" :)))

прочтите еще раз мои посты, нет, 2 раза прочтите каждый, а потом займитесь сравнением того, что наделали вы и того, что советовал я.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Указатели на функцию в массиве
СообщениеДобавлено: Ср июл 15, 2015 11:37:27 
Грызет канифоль

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пт мар 20, 2009 12:25:47
Сообщений: 289
Откуда: Ivanovo
Рейтинг сообщения: 0
отличие одно нашёл.
typedef void (*func_ptr)(unsigned char); - исправил
(0) убрал - это ж указатель, а не функция. параметр же указывается дальше в коде...

п.с. я обучаемый малый, меня только подпнуть в верном направлении надо...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Указатели на функцию в массиве
СообщениеДобавлено: Ср июл 15, 2015 12:20:41 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2135
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18454
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
spongebob писал(а):
п.с. я обучаемый малый, меня только подпнуть в верном направлении надо...

рискуете нарваться на желающих запинать из добрых побуждений :)))

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Указатели на функцию в массиве
СообщениеДобавлено: Вт июл 21, 2015 16:21:35 
Потрогал лапой паяльник
Аватар пользователя

Карма: 1
Рейтинг сообщений: 14
Зарегистрирован: Сб сен 19, 2009 07:02:19
Сообщений: 378
Рейтинг сообщения: 0
ARV писал(а):
spongebob писал(а):
п.с. я обучаемый малый, меня только подпнуть в верном направлении надо...

рискуете нарваться на желающих запинать из добрых побуждений :)))

+100.
2spongebob. Что это Ваше означает?:
Код:
...
static func_ptr farr[4] = {fu(0),fd(0),fl(0),fr(0)};
...

Вам нужно указатели в массив прописать, т.е:
Код:
...
static func_ptr farr[4] = {fu,fd,fl,fr};
...

А аргументы уже при вызове указывать:
Код:
...
// пользуемся
farr[0](0); // вызываем ф-ю fu с аргументом "0"

Если количество и тип аргументов будет разным, то тоже есть стандартный ход - передать два аргумента: Первый - их количество, второй - указатель на массив ( массив структур ) аргументов, либо просто идентификатор типа аргумента + указатель. Логику парсинга аргументов можно придумать любую.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Указатели на функцию в массиве
СообщениеДобавлено: Ср июл 22, 2015 14:23:08 
Грызет канифоль

Карма: 3
Рейтинг сообщений: 10
Зарегистрирован: Пт мар 20, 2009 12:25:47
Сообщений: 289
Откуда: Ivanovo
Рейтинг сообщения: 0
как жаль что вас с нами небыло
вопрос исчерпан уже


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y