#include "stdio.h"
int c = 100;
int* add(int a,int b) //一段特殊的内存,它存放的是自己地址
{
c = a + b;
return &c;
}
int* (*Add)(int,int); //申明一个函数指针
int main(void)
{
Add = add; //Add是一个指针变量,存放了指针函数(一个指针)的内容
printf(" &c:%p\n\n",&c);
printf(" &add:%p\n",&add); //函数本身的地址
printf(" add:%p\n",add); //存放的内容
printf(" *add:%p\n",*add);
printf(" **add:%p\n",**add);
printf(" ***add:%p\n",***add);
printf("****add:%p\n\n",****add);
//由此可以看出指针函数存放的是它自己的地址
printf(" &Add:%p\n",&Add); //函数指针自身的地址
printf(" Add:%p\n",Add);
printf(" *Add:%p\n",*Add);
printf("**Add:%p\n",**Add);
//另外笔者发现add这段特殊的内存,给Add赋值时,似乎可以不用考虑是赋内容还是地址的问题
printf("*((*Add)(256,1024)):%d\n",*((*Add)(256,1024)));
Add = *add;
printf("*((*Add)(2,3)):%d\n",*((*Add)(2,3)));
Add = &add;
printf("*((*Add)(6,7)):%d\n",*((*Add)(6,7)));
return 0;
}
总结如下: