Итак, я подумал, что при создании указателей на функции вам не нужно 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
указывают на одно и то же местоположение.Почему это с массивами и функциями?Сохранен ли адрес в ячейке памяти, адрес которой совпадает с адресом, в котором хранится значение (адрес)?