Начиная с нуля функция имеет некоторый адрес памяти от того места, где они начинают выполняться. В языке сборки они называются (вызывают «адрес памяти функции»). Теперь вернитесь к функции C Если у функции есть адрес памяти, тогда с ними можно управлять указателями в C.So. По правилам C
1. Сначала вам нужно объявить указатель на функцию 2.Pass адрес желаемой функции
**** Примечание-> функции должны быть одного типа ****
Эта простая программа будет иллюстрировать каждую вещь.
#include<stdio.h>
void (*print)() ;//Declare a Function Pointers
void sayhello();//Declare The Function Whose Address is to be passed
//The Functions should Be of Same Type
int main()
{
print=sayhello;//Addressof sayhello is assigned to print
print();//print Does A call To The Function
return 0;
}
void sayhello()
{
printf("\n Hello World");
}
[/g0] После этого позволяет увидеть, как машина понимает Them.Glimpse машинной инструкции вышеуказанной программы в 32-битной архитектуре.
В области красных отметок показано, как происходит обмен и хранение адреса в eax. Затем их команда вызова на eax. eax содержит желаемый адрес функции