Имената на функциите всъщност били указатели
Wednesday, March 26th, 2008Днес ни показаха един пиниз, според който имената на функциите в С са всъщност указатели към началния адрес на функцията като алгоритмична структура в кодовия сегмент на програмата. Т.е. като имаш адреса можеш да стартираш функцията.
Ето една програма, която показва файдата от цялата работа:
#include <stdio.h>
int test (int a){
printf(”A: %d\n”,a);
return a;
}
int druga (int a){
printf(”B: %d\n”,a);
return a-1;
}
int plqk (int (*test) (int a)){
printf(”Rez ot test(%d)\n”,(*test) (3));
return 0;
}
int main(void){
plqk(test);
plqk(druga);
plqk(main);
int * p = (int *) test;
printf(”test: %p\n”,test);
printf(”druga: %p\n”,druga);
printf(”p: %p\n”,p);
return 0;
}
За неразбралите - функцията plqk() извиква някоя от другите функции, като точно коя се записва във формалния параметър на бляк() ![]()
