У меня есть структура, содержащая объявление вроде этого:
blockquote>Нет, вы этого не делаете. Это синтаксическая ошибка. Вы ищете:
void (*functions[256])();
Что такое массив указателей на функции. Обратите внимание, однако, что
void func()
не является «функцией, которая не принимает аргументов и ничего не возвращает». Это функция, которая принимает неопределенные числа или типы аргументов и ничего не возвращает. Если вам нужны «никакие аргументы», вам это нужно:void (*functions[256])(void);
В C ++
void func()
означает, что означает «не принимает аргументов», что вызывает некоторую путаницу (тем более, что функциональность C указывает, что дляvoid func()
имеет сомнительное значение.)В любом случае вы должны
typedef
указатель на функцию. Это сделает код бесконечно легче понять, и у вас будет только один шанс (вtypedef
), чтобы получить синтаксис неправильно:typedef void (*func_type)(void); // ... func_type functions[256];
В любом случае вы не можете назначить массив, но вы можете инициализировать массив и скопировать данные:
static func_type functions[256] = { /* initializer */ }; memcpy(struct.functions, functions, sizeof(functions));
Использовать рекурсию. Обратите внимание, что параметр n
означает уровень глубины, и поскольку в атомной группе ( o * o )
есть две переменные, n
должно быть на 2 меньше числа переменных, которые вы хотите получить комбинациями групп умножения.
a = '( o * o )'
def g(n):
if n == 0:
return {a}
r = set()
for b in g(n - 1):
for i in range(len(b)):
if b[i] == 'o':
r.add(b[:i] + a + b[i + 1:])
return r
for n in range(5):
print(g(n))
Эти выходы:
{'( o * o )'}
{'( ( o * o ) * o )', '( o * ( o * o ) )'}
{'( ( ( o * o ) * o ) * o )', '( ( o * o ) * ( o * o ) )', '( o * ( o * ( o * o ) ) )', '( o * ( ( o * o ) * o ) )', '( ( o * ( o * o ) ) * o )'}
{'( ( ( o * o ) * ( o * o ) ) * o )', '( ( o * o ) * ( ( o * o ) * o ) )', '( o * ( o * ( o * ( o * o ) ) ) )', '( ( ( o * ( o * o ) ) * o ) * o )', '( ( o * o ) * ( o * ( o * o ) ) )', '( ( o * ( o * o ) ) * ( o * o ) )', '( o * ( o * ( ( o * o ) * o ) ) )', '( ( o * ( o * ( o * o ) ) ) * o )', '( ( ( o * o ) * o ) * ( o * o ) )', '( o * ( ( o * o ) * ( o * o ) ) )', '( ( o * ( ( o * o ) * o ) ) * o )', '( ( ( ( o * o ) * o ) * o ) * o )', '( o * ( ( ( o * o ) * o ) * o ) )', '( o * ( ( o * ( o * o ) ) * o ) )'}
{'( o * ( ( ( o * o ) * ( o * o ) ) * o ) )', '( ( ( o * ( o * o ) ) * ( o * o ) ) * o )', '( ( o * o ) * ( o * ( o * ( o * o ) ) ) )', '( ( ( o * o ) * o ) * ( o * ( o * o ) ) )', '( ( ( o * o ) * o ) * ( ( o * o ) * o ) )', '( ( ( o * ( o * o ) ) * o ) * ( o * o ) )', '( o * ( ( ( ( o * o ) * o ) * o ) * o ) )', '( o * ( o * ( o * ( ( o * o ) * o ) ) ) )', '( ( o * o ) * ( ( o * o ) * ( o * o ) ) )', '( ( o * o ) * ( o * ( ( o * o ) * o ) ) )', '( ( o * ( o * o ) ) * ( ( o * o ) * o ) )', '( ( ( ( o * o ) * o ) * ( o * o ) ) * o )', '( ( o * ( ( o * ( o * o ) ) * o ) ) * o )', '( ( ( o * ( ( o * o ) * o ) ) * o ) * o )', '( o * ( ( ( o * o ) * o ) * ( o * o ) ) )', '( ( ( ( ( o * o ) * o ) * o ) * o ) * o )', '( o * ( ( o * ( o * ( o * o ) ) ) * o ) )', '( ( ( o * o ) * ( o * o ) ) * ( o * o ) )', '( o * ( ( ( o * ( o * o ) ) * o ) * o ) )', '( o * ( o * ( o * ( o * ( o * o ) ) ) ) )', '( ( ( o * ( o * ( o * o ) ) ) * o ) * o )', '( ( o * ( o * o ) ) * ( o * ( o * o ) ) )', '( ( ( ( o * o ) * ( o * o ) ) * o ) * o )', '( ( ( o * o ) * ( o * ( o * o ) ) ) * o )', '( ( o * ( o * ( ( o * o ) * o ) ) ) * o )', '( ( o * ( ( ( o * o ) * o ) * o ) ) * o )', '( ( ( o * o ) * ( ( o * o ) * o ) ) * o )', '( ( o * o ) * ( ( o * ( o * o ) ) * o ) )', '( ( o * ( ( o * o ) * o ) ) * ( o * o ) )', '( o * ( o * ( ( o * o ) * ( o * o ) ) ) )', '( ( o * ( ( o * o ) * ( o * o ) ) ) * o )', '( o * ( o * ( ( o * ( o * o ) ) * o ) ) )', '( ( o * ( o * ( o * o ) ) ) * ( o * o ) )', '( ( o * o ) * ( ( ( o * o ) * o ) * o ) )', '( o * ( o * ( ( ( o * o ) * o ) * o ) ) )', '( o * ( ( o * ( o * o ) ) * ( o * o ) ) )', '( o * ( ( o * o ) * ( ( o * o ) * o ) ) )', '( o * ( ( o * o ) * ( o * ( o * o ) ) ) )', '( ( o * ( o * ( o * ( o * o ) ) ) ) * o )', '( o * ( ( o * ( ( o * o ) * o ) ) * o ) )', '( ( ( ( o * ( o * o ) ) * o ) * o ) * o )', '( ( ( ( o * o ) * o ) * o ) * ( o * o ) )'}