Указатели на функцию в массиве
-
spongebob
- Грызет канифоль
- Сообщения: 289
- Зарегистрирован: Пт мар 20, 2009 12:25:47
- Откуда: Ivanovo
- Контактная информация:
Указатели на функцию в массиве
Можно ли хранить указатели на функцию в массиве и вызывать функцию по номеру элемента в массиве?
например, есть функции a1(), a2(), a3()
и массив mas из трёх элементов
и в зависимости от того, к какому элементу массива мы обращаемся - вызывать определенную функцию
например, есть функции a1(), a2(), a3()
и массив mas из трёх элементов
и в зависимости от того, к какому элементу массива мы обращаемся - вызывать определенную функцию
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Указатели на функцию в массиве
язык Си это не запрещает - делайте и пользуйтесь.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
spongebob
- Грызет канифоль
- Сообщения: 289
- Зарегистрирован: Пт мар 20, 2009 12:25:47
- Откуда: Ivanovo
- Контактная информация:
Re: Указатели на функцию в массиве
а как?
можно пример кода?
можно пример кода?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Указатели на функцию в массиве
Код: Выделить всё
typedef void (*func_ptr)(void); // описали тип "указатель на функцию"
// определили функции
static void f1(void){
...
}
static void f2(void){
...
}
// определили массив из указателей на эти функции
static func_ptr farr[2] = {f1, f2};
// пользуемся
farr[0](); // вызываем ф-ю f1если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
spongebob
- Грызет канифоль
- Сообщения: 289
- Зарегистрирован: Пт мар 20, 2009 12:25:47
- Откуда: Ivanovo
- Контактная информация:
Re: Указатели на функцию в массиве
огромное спасибо!
а если нужно параметр передать функции?
static void f2( параметр ){
...
}
farr[0](параметр)?
а если нужно параметр передать функции?
static void f2( параметр ){
...
}
farr[0](параметр)?
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Указатели на функцию в массиве
тип и параметры функции у вас обязаны совпадать с типом указателя. нужны функции с параметром - изменяйте typedef соответствующим образом, например для 1-го параметра типа int будет так:
ни в коем случае не пихайте в массив "несовместимые" по типу и параметрам функции! по правилам Си вы получите только предупреждение, проект скомпилируется, но последствия будут печальными...
Код: Выделить всё
typedef void (*func_ptr)(int);если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
spongebob
- Грызет канифоль
- Сообщения: 289
- Зарегистрирован: Пт мар 20, 2009 12:25:47
- Откуда: Ivanovo
- Контактная информация:
Re: Указатели на функцию в массиве
мне нужно передать ТОЛЬКО unsigned char
несколько разных функций, но все они получают только один unsigned char
несколько разных функций, но все они получают только один unsigned char
-
spongebob
- Грызет канифоль
- Сообщения: 289
- Зарегистрирован: Пт мар 20, 2009 12:25:47
- Откуда: Ivanovo
- Контактная информация:
Re: Указатели на функцию в массиве
Код: Выделить всё
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)};
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
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Указатели на функцию в массиве
давайте поиграем в "найди 10 отличий" 
прочтите еще раз мои посты, нет, 2 раза прочтите каждый, а потом займитесь сравнением того, что наделали вы и того, что советовал я.
прочтите еще раз мои посты, нет, 2 раза прочтите каждый, а потом займитесь сравнением того, что наделали вы и того, что советовал я.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
spongebob
- Грызет канифоль
- Сообщения: 289
- Зарегистрирован: Пт мар 20, 2009 12:25:47
- Откуда: Ivanovo
- Контактная информация:
Re: Указатели на функцию в массиве
отличие одно нашёл.
typedef void (*func_ptr)(unsigned char); - исправил
(0) убрал - это ж указатель, а не функция. параметр же указывается дальше в коде...
п.с. я обучаемый малый, меня только подпнуть в верном направлении надо...
typedef void (*func_ptr)(unsigned char); - исправил
(0) убрал - это ж указатель, а не функция. параметр же указывается дальше в коде...
п.с. я обучаемый малый, меня только подпнуть в верном направлении надо...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Указатели на функцию в массиве
рискуете нарваться на желающих запинать из добрых побужденийspongebob писал(а):п.с. я обучаемый малый, меня только подпнуть в верном направлении надо...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Указатели на функцию в массиве
+100.ARV писал(а):рискуете нарваться на желающих запинать из добрых побужденийspongebob писал(а):п.с. я обучаемый малый, меня только подпнуть в верном направлении надо...
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"
-
spongebob
- Грызет канифоль
- Сообщения: 289
- Зарегистрирован: Пт мар 20, 2009 12:25:47
- Откуда: Ivanovo
- Контактная информация:
Re: Указатели на функцию в массиве
как жаль что вас с нами небыло
вопрос исчерпан уже
вопрос исчерпан уже


