为什么c中的函数指针根本不必是指针?

问题描述 投票:0回答:5

具有此:

#include <stdio.h>
#include <stdlib.h>

int do_op(int (*op)(int,int),int a, int b){ return op(a,b); }
/*int do_op(int (op)(int,int),int a,int b){return op(a,b);} */
int add(int a, int b){ return a+b; }
int mul(int a, int b){ return a*b; }

int main(){
    printf("add:%i;mul:%i\n",do_op(add,5,10),do_op(mul,5,10));
}

到目前为止,我对函数指针的了解是,它们的“类型”是返回值的类型。 (不知道它是如何在气体中实现的,返回值是在%rax之前的ret中?只是一个细节),但是当不必引用该函数时,引用该函数有什么意义呢?完全没有?它是not指针是什么意思? (例如(op)),那么value使用的功能(不是地址)吗?但是函数通常不具有value,它仅在%rbi中具有起始地址,完成后将通过ret重新回到上级函数,因此在c中,这是什么意思?指针”不是pointer吗? (请举一些例子)

问题与代码中的注释有关,其中(op)部分不是指针,但仍然可以使用。那是不是指针?

c function-pointers implicit-conversion function-declaration
5个回答
3
投票

函数指针的类型不是其返回类型。它是指向的函数的类型。


2
投票

到目前为止,我对函数指针的了解是,它们的“类型”是返回值的类型。


1
投票

到目前为止,我对函数指针的了解是,它们的“类型”是 返回值的类型。


0
投票

函数指针与数据指针的不同之处在于,它们指向代码而不是数据。因此,指针的[[value


0
投票
c中的函数指针始终是指向该函数的第一条指令的指针。c中的函数值(将*应用于函数指针的值)也与函数指针的实现方式相同,导致这种混淆。最后,函数将始终是代码的指针,而编译器只是忽略您使用的是c函数指针还是值。
© www.soinside.com 2019 - 2024. All rights reserved.