Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Саша Перков
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 72
#1

Массив указателей на функции - C (СИ)

10.01.2017, 23:44. Просмотров 181. Ответов 17
Метки нет (Все метки)

Мне необходимо создать массив, состоящий из 10 элементов, который хранил бы указатели на функции. Потом этот массив надо наполнить указателями на сами функции, причем по отдельности каждый (т.е. сначала первый, потом второй). Ну а потом с помощью этого массива вызвать эти функции дальше в программе. Подскажите пожалуйста как должен выглядеть синтаксис всех вышеупомянутых действий.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2017, 23:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив указателей на функции (C (СИ)):

Объявить массив из N указателей на функции, возвращающих указатели на функции, возвращающие указатель на char - C (СИ)
Задание: Объявить массив из N указателей на функции, возвращающих указатели на функции, возвращающие указатель на char. Можно...

Массив указателей на функции - C (СИ)
Здравствуйте! Подскажите пожалуйста, где ошибка в программе. Не могу разобраться с массивом указателей на функции. В строчках " ...

Определить массив указателей на функции - C (СИ)
Прощу помощи:) Написать программу, в которой необходимо определить массив указателей на функции. Вводить цифру, определяющую какую...

Создать массив из указателей которые указывают на функции - C (СИ)
Как можно создать массив из указателей которые указывают на функции?

Создать массив указателей на функции к функциям, которые имеют разное число и типы параметров? - C (СИ)
Можно ли создать массив указателей на функции к функциям, которые имеют разное число и типы параметров?

Запись указателей в массив указателей - C (СИ)
Ребята, подскажите, пожалуйста, что не так сделано? Задача: без использования библиотек распарсить строку в массив строк. В tokenList не...

17
nimazzzy
Заблокирован
10.01.2017, 23:57 #2
Вот пример массива указателей на функции
C
1
void(*a[10])();
Цитата Сообщение от Саша Перков Посмотреть сообщение
Потом этот массив надо наполнить указателями на сами функции, причем по отдельности каждый (т.е. сначала первый, потом второй)
Ты не знаешь как присвоить значение эелементу массива? Через индекс в квадратных скобках.
Вызвать - обращение к конкретному указателю через индекс в квадратных скобках, потому круглые скобки для вызова.
0
Саша Перков
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 72
11.01.2017, 00:00  [ТС] #3
Цитата Сообщение от nimazzzy Посмотреть сообщение
Ты не знаешь как присвоить значение эелементу массива? Через индекс в квадратных скобках.
Вызвать - обращение к конкретному указателю через индекс в квадратных скобках, потому круглые скобки для вызова.
Вот создать массив я смог сам, да. А как присвоить ему значение не знаю. Пробовал по всякому. Везде ошибку выдает. Напиши пожалуйста как надо.
0
pakanpak
47 / 47 / 24
Регистрация: 18.11.2016
Сообщений: 93
11.01.2017, 00:02 #4
Саша Перков, сделал для 2х функций, но принцип думаю понятен
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
 
void f1(), f2();
 
 
int main()
{
 
setlocale(LC_ALL,"rus");
void (*pn[2])(void); //тут объявляем массив указателей (2 элемента)
pn[0]=&f1;             //указываем на функции
pn[1]=&f2;
 
pn[0]();                 //выполняем с помощью указателей
pn[1]();
return 0;
 
}
 
void f1()
{
    printf("Это функция №1\n");
}
 
void f2()
{
    printf("Это функция №2\n");
}
0
nimazzzy
Заблокирован
11.01.2017, 00:02 #5
C
1
2
3
4
5
6
void func()
{
    puts("func\n");
}
...
a[3] = func;
0
Саша Перков
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 72
11.01.2017, 00:05  [ТС] #6
Цитата Сообщение от pakanpak Посмотреть сообщение
Саша Перков, сделал для 2х функций, но принцип думаю понятен
Сделал вот так, но выдает ошибку, что "Размер массива должен быть больше нуля". Что написал я не так?
C++
1
2
void(*p_Text[10])();
p_Text[0] = Text_Level1;
0
nimazzzy
Заблокирован
11.01.2017, 00:07 #7
Цитата Сообщение от Саша Перков Посмотреть сообщение
Сделал вот так, но выдает ошибку, что "Размер массива должен быть больше нуля". Что написал я не так?
Пиши весь код.
0
Саша Перков
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 72
11.01.2017, 00:11  [ТС] #8
Цитата Сообщение от nimazzzy Посмотреть сообщение
Пиши весь код.
Там очень много кода. Что может быть не так? Функция у меня без аргументов и не возвращает значений. Кроме функции и вот этих двух строчек в коде больше ничего относящегося к этому нет. Может заголовочный файл поставить какой-нибудь надо?
0
nimazzzy
Заблокирован
11.01.2017, 00:12 #9
Цитата Сообщение от Саша Перков Посмотреть сообщение
Что может быть не так?
Что ошибка не в том куске, что ты написал. На какую конкретно строку жалуется компилятор?
0
Саша Перков
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 72
11.01.2017, 00:14  [ТС] #10
Цитата Сообщение от nimazzzy Посмотреть сообщение
Что ошибка не в том куске, что ты написал. На какую конкретно строку жалуется компилятор?
Нолик подчеркивает во второй строчке, которую скинул
0
nimazzzy
Заблокирован
11.01.2017, 00:17 #11
У меня все ок:
C
1
2
3
4
5
6
7
8
9
10
11
void Text_Level1()
{
    puts("func\n");
}
 
int main()
{
    void(*p_Text[10])();
    p_Text[0] = Text_Level1;
    p_Text[0]();
}
1
Саша Перков
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 72
11.01.2017, 00:23  [ТС] #12
Понял в чем дело. Надо все это делать внутри функции. У меня же это находилось прямо так. Не внутри какой-либо функции. Не знал, что обязательно надо это делать внутри какой-либо функции.
0
nimazzzy
Заблокирован
11.01.2017, 00:27 #13
Цитата Сообщение от Саша Перков Посмотреть сообщение
Не знал, что обязательно надо это делать внутри какой-либо функции.
Не обязательно.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void Text_Level1()
{
    puts("func1");
}
 
void Text_Level2()
{
    puts("func2");
}
 
void(*p_Text[2])() = { Text_Level1, Text_Level2 };
 
int main()
{
    p_Text[0]();
    p_Text[1]();
    getchar();
}
0
Саша Перков
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 72
11.01.2017, 00:34  [ТС] #14
Цитата Сообщение от nimazzzy Посмотреть сообщение
Не обязательно
А без фигурных скобок можешь? Ну, точно также как показывал мне. Фигурными скобками, да, и у меня получается вне функций.
0
nimazzzy
Заблокирован
11.01.2017, 00:40 #15
Цитата Сообщение от Саша Перков Посмотреть сообщение
А без фигурных скобок можешь?
Этот вопрос "можешь" ты языку должен задать, а не мне. Информация у тебя есть - разбирайся.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2017, 00:40
Привет! Вот еще темы с ответами:

Объявить массив mb как массив литерных указателей без указания количества элементов - C (СИ)
Помогите решить такую задачу: Объявить массив mb как массив литерных указателей без указания количества элементов; инициализировать...

Массив указателей меняет сам массив - C (СИ)
Здравствуйте! есть программа с массивом указателей, этот массив форматируется по алфавиту и выводится в конце программы, а так же в конце...

Использование массива указателей на функции - C (СИ)
Подскажите, пожалуйста, что я делаю не так. Это компилируется, но не выводит функцию func1. void func1(void); void func2(void); ...

Ошибка в инициализации массива указателей на функции - C (СИ)
Как правильно инициализировать массив указателей на функции? Компилятор указывает ошибку в этой строчке после знака равно void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
11.01.2017, 00:40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru