Я хочу передать функцию в другую функцию, но я так сильно смутил синтаксис и то, что на самом деле происходит. Это код, который я бегу:Передача функции в другую функцию в C
#include <stdio.h>
int func(int a){
printf("%d\n", a);
}
void another_func(int p_func(int)){
int (*funcptr)(int) = p_func;
funcptr(7);
}
int main(void){
another_func(func);
return 0;
}
Однако, я обнаружил, что я могу поставить сколько Звездочка я хочу, прежде чем FUNC при вызове его в основном, к примеру:
another_func(*******************func);
Я сделать то же самое при назначении функции указателя функции, например:
int (*funcptr)(int) = ***********p_func;
Я хотя запрещено ставить амперсанд перед p_func при назначении его к указателю функции. Кроме того, кажется, не имеет значения, если я пишу:
void another_func(int (*p_func)(int)){
Может ли мой просить о помощи после некоторых легендарных богов C от спячки, которые могут сделать подробное объяснение? Я действительно не понимаю, как это работает, что передается и т. Д.
Итак, по сути функциональные выражения всегда преобразуются в обозначения функций, независимо от того, что? –
@NoobDoob Обозначение функции всегда преобразуется в указатель функций с редкими исключениями, перечисленными в представленной цитате из стандарта C. –
Итак, когда я передаю функцию another_func, она автоматически становится указателем, тем самым помещая амперсанд раньше, как я сказал, незаконным? –