【发布时间】:2012-03-22 02:23:09
【问题描述】:
所以我想在制作函数指针时,你不需要operator & 来获取初始函数的地址:
#include <stdio.h>
double foo (double x){
return x*x;
}
int main () {
double (*fun1)(double) = &foo;
double (*fun2)(double) = foo;
printf("%f\n",fun1(10));
printf("%f\n",fun2(10));
printf("fun1 = %p \t &foo = %p\n",fun1, &foo);
printf("fun2 = %p \t foo = %p\n",fun2, foo);
int a[10];
printf(" a = %p \n &a = %p \n",a,&a);
return 0;
}
输出:
>./a.out
100.000000
100.000000
fun1 = 0x4004f4 &foo = 0x4004f4
fun2 = 0x4004f4 foo = 0x4004f4
a = 0x7fff26804470
&a = 0x7fff26804470
然后我意识到数组也是如此,这意味着如果您有 int a[10] 两个 a 和 &a 指向同一个位置。为什么是数组和函数?该地址是否保存在与保存在其中的值(地址)具有相同地址的内存位置?
【问题讨论】:
-
我一直不太明白为什么您不必使用 address-of 运算符来获取函数的地址。我一直认为这只是一点语法糖。
-
@Bill:没错!这就是我一直以来的想法,但似乎你不需要!
-
如果地址和自己保存在同一个内存位置,就不可能有实际的功能码/数组数据!您实际上会将数组视为指针,将作为参数传递的函数也视为指针,因此您不需要 addressof 运算符。基本上,函数或数组的“值”是无稽之谈。只有地址是有意义的,所以当你查询“值”时,你会得到它,当你查询地址时也是如此。
标签: c function pointers function-pointers