@Refiru

Как создать двумерный массив указателей на функции Си?

Здравствуйте. Я только изучаю Си, но задачи хочется решать сейчас.
В поисках интернета я нашел кусок кода Си, который адаптировал под свою структуру.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
void (*pn[2])(void);

void f1(){
    printf("Test\n");
}
    

void f2(){
    printf("Тест 2\n");

}
    
int test(){
    pn[0]=&f1;
    pn[1]=&f2;
    return 0;
}
int main() {
    setlocale(LC_ALL, "ru_RU.utf8"); 
    test();
    pn[0](); 
    pn[1]();
    return 0;
}

Почему то нету варианты при вставки кода, С! Только С++, несправедливо.

Суть такая что в отдельном файле у меня много функций 50+ и я их буду добавлять.
Вызываться они будут циклом по параметру массива. Количество функций я знаю, мне хватит статистического массива.

Но мне нужно именно векторный массив где будет x и y?

Что то вроде array[1][2] по скольку я только изучаю этот язык. Возникают вопросы.

Мне даже этот код не легко понять, так что если кто-то сможет объяснить доступно.
Буду признателен.
Также не очень удобно каждый раз присваивать значение вручную, хотя я с этим смирился.
Буду рад любым советам и подсказкам!
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
includedlibrary
@includedlibrary
Массив функций можно инициализировать и без амперсанда:
int test() {
    pn[0]=f1;
    pn[1]=f2;
    return 0;
}


Вот так можно создать двумерный массив функций:
#include <stdio.h>

void p1() { puts("p1"); }
void p2() { puts("p2"); }
void p3() { puts("p3"); }
void p4() { puts("p4"); }

int main() {
	void (*pn[2][2])() = {
		{p1, p2},
		{p3, p4},
	};
	
	for(int i = 0; i < 2; i++)
	    for(int j = 0; j < 2; j++)
	        pn[i][j]();
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
JetBrains Санкт-Петербург
от 200 000 ₽
Verme Москва
от 120 000 ₽
AGIMA Москва
До 160 000 ₽
19 сент. 2020, в 12:54
10000 руб./за проект
19 сент. 2020, в 12:04
1000 руб./в час
19 сент. 2020, в 11:26
17500 руб./за проект