![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9MmaOlXTU1ENZpXTmZEWjZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TM2MzN1YTM5ATNxITM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
練習1:函數指針,直接調用和間接調用,用一函數來引用一指針,如何通過一位址調用一函數,最經典的用途是做挂
#define _CRT_SECURE_NO_WARNINGS //去掉安全檢查
#include<stdio.h>//标準的輸入輸出檔案
#include<stdlib.h>//使用system函數
#include<Windows.h>
#include<time.h>
#include<string.h>
//直接調用的定義你隻有在原代碼裡才能調用,加入我沒有你的原代碼怎麼調用,就要用到間接調用,間接調用就是加入建立一個msg這樣一個函數指針
void msg()
{
//窄字元,需要A
MessageBoxA(0,"你好","出來",0);
}
int add(int a,int b)
{
return a + b;
}
void main2()
{
msg();//直接調用,你隻有在原代碼裡才能調用
printf("%d",add(1,10));//直接調用,如何調用帶傳回值的
//接下來我們分析一下函數指針,函數名就是一記憶體位址
printf("\n%x,%x",msg,add);
//舉例:如何引用msg
//間接調用,函數指針一般用法,如何引用 msg和add
void msg();//有一秘訣,把函數名挖空,輸入(*p),這就是一個函數指針,換成void (*p)();
void(*p)() = msg;//要初始化它,可以讓它,也就是等于msg位址
p();//可以調用它
//舉例:如何引用add
//int add(int a,int b)
//int (*px)(int a,int b)//px防止和上面直接調用裡面的p重名
//printf("%d",px(1,10));
system("pause");
}