对于函数指针“;fptr";,“为什么是”的价值;fptr";和*fptr一样?什么*fptr意思?我只知道(*fptr)或fptr() 为什么在这个行为发生时,函数指针行为类似于数组指针< /代码>?我的意思是,让我们从数组列表[]/COD>开始,我们将考虑列表> /COD>和列表< /代码> .< char name[5]= "Eric",(*aptr)[5]=&name; printf("%p,%p",*aptr,name); //BOTH ARE NUMERICALLY SAME

对于函数指针“;fptr";,“为什么是”的价值;fptr";和*fptr一样?什么*fptr意思?我只知道(*fptr)或fptr() 为什么在这个行为发生时,函数指针行为类似于数组指针< /代码>?我的意思是,让我们从数组列表[]/COD>开始,我们将考虑列表> /COD>和列表< /代码> .< char name[5]= "Eric",(*aptr)[5]=&name; printf("%p,%p",*aptr,name); //BOTH ARE NUMERICALLY SAME,c,function-pointers,C,Function Pointers,我们也可以将数组元素称为(*aptr)[1],(*aptr)[2],等等。我知道这里发生了什么 但是为什么函数是相同的?毕竟,一个“函数”不是一个与数组相似的元素的连续内存块。考虑这个。 假设fptr和我的程序一样是一个函数指针。为什么fptr和*fptr在打印时会给出相同的值?什么是*fptr甚至意味着什么?我只知道我们可以使用它的指针(*fptr)(或fptr())来调用函数,但是*fptr单独是什么呢 #include<stdio.h> void foo(){}; int

我们也可以将数组元素称为
(*aptr)[1]
(*aptr)[2]
,等等。我知道这里发生了什么

但是为什么函数是相同的?毕竟,一个“函数”不是一个与数组相似的元素的连续内存块。考虑这个。

假设
fptr
和我的程序一样是一个函数指针。为什么
fptr
*fptr
在打印时会给出相同的值?什么是
*fptr
甚至意味着什么?我只知道我们可以使用它的指针
(*fptr)(
fptr()
)来调用函数,但是
*fptr
单独是什么呢

#include<stdio.h>

void foo(){};

int main(void)
{
void (*fptr)()=foo;
printf("%p,%p",fptr,*fptr);

}
#包括
void foo(){};
内部主(空)
{
无效(*fptr)()=foo;
printf(“%p,%p”,fptr,*fptr);
}

结果-
00401318 00401318
指针指向内存位置。一个函数在内存中,有一个起始地址。您可以很好地取消对函数名(指针)的引用,以获取该地址处的函数

来自Stephen Prata的“Cpp初级读物升级版”


历史与逻辑神圣的语法


pf和(*pf)如何等效? 一个思想流派坚持认为,因为pf是指向 函数,*pf是一个函数;因此,您应该使用(*pf)()作为 函数调用。第二所学校坚持认为,因为 函数是指向该函数的指针,指向该函数的指针 应该像函数名一样工作;因此,您应该使用pf()作为 函数调用。C++采用了两种形式都是妥协的观点。 正确,或者至少可以被允许,即使它们在逻辑上是正确的 不一致的。在你做出妥协之前 严厉地说,反映出持有不符合逻辑的观点的能力 自我一致性是人类心理过程的一个标志


函数隐式转换为函数指针,如果取消引用函数,它将再次转换为函数指针。一次又一次。再一次。。。您也可以毫无问题地执行
***************fptr
。请参阅