问答

c++ 关于指针到功能声明中的函数

 来源    2018-02-28    1  
#include<stdio.h>
#include<stdlib.h>

int fun1()
{
    printf("I am fun1.");
    return 0;
}

int fun2(int fun())
{
    fun();
    return 0;
}

int main()
{
    fun2(fun1);
    return 0;
}

上面的程序可以运行。就我而言,我可以理解int fun2(int(* fun)()),但是我不知道int fun2(int fun())的工作原理。谢谢。

当你写int fun2(int fun())时,int fun()的参数转换成int(* fun)(),它完全等同于:

int fun2(int (*fun)());

当您将数组声明为函数参数时,会发生更多的famirar转换。例如,如果你这样做:

int f(int a[100]);

即使这里的参数类型转换为int *,它变成:

int f(int *a);

函数类型和数组类型分别转换为函数指针类型和指针类型的原因是因为Standard不允许将函数和数组传递给函数,也不能从函数返回函数和数组。在这两种情况下,它们都会变成他们的指针版本。

C 03标准在§13.1/ 3中说明(与C 11相同),

Parameter declarations that differ only in that one is a function type and the other is a pointer to the same function type are equivalent. That is, the function type is adjusted to become a pointer to function type (8.3.5).

这里有一个更有趣的讨论:

> Reference to Function syntax – with and without &

功能声明中是否有C语法的功能指针
问答而不是为函数声明函数指针typedef,是否可以从函数声明中获取它? 通常情况下, int foo(int x); typedef int (*fooFunc)(int); fooFunc aFunc ...
将指针存储在void *中的函数指针
问答我明白你为什么不能这样做: void(*fp)(void) = &function; function_taking_void_pointer((void*)fp); 因为类型的长度可能不同. ...
1
如何将函数指针传递给c中的函数?
问答这是三个功能,如: – float Plus (float a, float b) { return a+b; } float Minus (float a, float b) { return a- ...
1
我可以在C中使用变量声明中的函数吗? int f(),i;
问答从了解Unix编程,第1.6章,more01.c示例: int see_more(), reply; 我tried一些类似的代码: #include <stdio.h> int main( ...
1
通过将指针传递给Go中的函数来获取不同的值
问答假设我想传递一个指向函数的指针,并通过这样做来改变该指针指向的结构的值.我通常会通过取消引用指针来做到这一点: type Test struct { Value int} func main() { ...
1
将表示2D数组的指针传递给C中的函数
问答http://www.neilstuff.com/guide_to_cpp/notes/Multi%20Dimension%20Arrays%20and%20Pointer%20Pointers.ht ...
1
是否可以直接在C中的结构声明中指定函数?
问答例如: struct Foo { int bar; int (*baz)(int); }; int testFunc(int x) { return x; } Foo list[] = { { 0, ...
在javascript对象文字符号声明中调用函数
问答我正在使用这个关键字来调用我创建的对象字面值中的一个函数.但是一个错误显示说this.doTheMove()不是一个函数: window.onload = function(){ var animBt ...
1
jquery – 如何在声明中编写函数
问答我正在尝试在图像上获取"alt"属性文本,以便在使用fancybox时显示为标题 HTML <a href='inlinePicture'........ <img a ...
将结果指针传递给c中的函数
问答我将一个指针传递给一个函数的结构有问题.我的代码基本上是如下所示.在main函数调用了modify_item之后,stuff == NULL.我想要的东西是指向一个元素等于5的项目结构的指针.我做错了 ...
2
通过将指针传递给c中的函数来创建2D数组
问答所以我读了几十个将2D数组指针传递给函数的例子,以便在函数中获取/更改该数组的值.但是可以在函数内创建(分配内存).像这样的东西: #include <stdio.h> void crea ...
函数声明中的函数声明,具有相同名称的javascript
问答我刚刚在javascript中看到了这种模式: var test = function () { function test(args) { this.properties = args || {}; ...
*C语言有关指针的变量声明中的几个易错点
日志转至:http://my.oschina.net/ypimgt/blog/108265 Technorati 标签:  指针, typedef, const, define          我们都知 ...
1
如何在没有typedeffing的情况下在一行中声明多个函数指针?
问答更多的是好奇心而不是任何事情.基本上我想知道是否可以在一行中声明多个函数指针,如: int a = 1, b = 2; 有功能指针?无需诉诸typedef. 我试过void(* foo = NULL, ...
1
是否正确C99,您不需要在结构中的函数指针声明中指定参数?
问答我编写了以下C99代码,并对结构声明感到疑惑.在其中我声明了两个函数指针,它们最终指向主代码中的两个push / pop方法.在函数指针声明中,我已经省略了参数,程序编译好了.它是否正确?我确定我已经 ...
在C中如何声明一个常量函数指针的数组?
问答我需要声明一个指向数组的函数,如下所示: extern void function1(void); extern void function2(void); ... void (*MESSAGE_HA ...
1
c – 为什么括号在函数指针声明中很重要?
问答我不明白为什么接受以下声明: typedef void (*_tStandardDeclaration)(LPVOID); 而以下不是: typedef void *_tDeclarationWith ...
C中函数指针的递归声明
问答我想声明一个函数,返回一个指向相同类型的函数的指针. 我想使用它来实现状态机,如下所示: typedef event_handler_t (*event_handler_t)(event_t*); / ...
1
在goLang中使用函数指针值声明映射
问答我想声明一个看起来像这样的地图,所以我可以将各种init函数映射到initType: func makeMap(){ m := make(map[initType]&InitFunc) //H ...
2