3

就这种行为而言,为什么function pointer行为类似于?我的意思是,让我们从将考虑和array pointer的数组的情况开始。list[]&listlist

 char name[5]= "Eric",(*aptr)[5]=&name;
 printf("%p,%p",*aptr,name); //BOTH ARE NUMERICALLY SAME

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

但是为什么对函数同样有效呢?毕竟,“函数”本身并不是像数组那样由相似元素组成的连续内存块。考虑一下。

假设fptr在我的程序中是一个函数指针。为什么打印时fptr和给出相同的值?甚至是什么意思?我只知道我们可以使用它的指针 as或 as来调用一个函数,但那又是什么?*fptr*fptr(*fptr)()fptr()*fptr

#include<stdio.h>

void foo(){};

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

}

结果- 00401318 00401318

4

1 回答 1

3

指针是指向内存位置的。一个函数在内存中并且有一个起始地址。您可以很好地取消引用函数名称(它是一个指针)以获取该地址处的函数。

来自 Stephen Prata “ Cpp Primer Plus


历史与逻辑 神圣的语法!


pf 和 (*pf) 如何等效? 一个学派认为,因为 pf 是指向函数的指针,所以 *pf 是函数;因此,您应该使用 (*pf)() 作为函数调用。第二个学派认为,因为函数名是指向该函数的指针,所以指向该函数的指针应该像函数名一样起作用。因此您应该使用 pf() 作为函数调用。C++ 采取妥协的观点,即这两种形式都是正确的,或者至少可以被允许,即使它们在逻辑上彼此不一致。在你过分严厉地判断这种妥协之前,请反思一下,持有逻辑上不自洽的观点的能力是人类心理过程的一个标志。

于 2013-05-16T07:31:19.937 回答