#include <stdio.h> int * sum(int x); //聲明一個 指針函數 返回類型位一個指針變量 可以通過*p來獲取值 int (*pfun)(int,int);//聲明一個 函數指針 int max(int x,int y);//聲明全局函數 int getname(int x,int y, int(*p)(int,int));//聲明函數指針 int add(int x,int y); int main(void) { //int name = 400; int *re = sum(100); //sleep(1); printf("%d %p\n",*re,re); //sleep(2); printf("%d %p\n",*re,re);//嚴重有問題 居然值不一樣了 //max = 0x12345;//錯誤 函數名和數組名的地址不允許修改 pfun = max;//初始化函數指針 指向max函數的函數指針變量 printf("sum的入口地址:%p\n",sum); printf("max的入口地址:%p pfun的地址:%p max的大小:%d\n",max, pfun, pfun(10,20));//函數名就是函數的入口也是地址 int x = getname(44,55,max);//函數名稱 就是地址就是指針 printf("x的值:%d\n",x); printf("x+y的值:%d\n",getname(10,20,add)); return 0; } //定義函數指針變量 int getname(int x, int y,int(*p)(int,int)){ return p(x,y); } int add(int x, int y) { return x+y; } int max(int xx, int yy){ return xx>yy?xx:yy; } int * sum(int x){ int static sum =0;//static 修身的變量在數據段;不會被函數棧回收 int *p = ∑//最好是定義一個指針變量 int i; for(i=1;i<=x;i++){ sum +=i; } return p; //return ∑//會警告 返回的是局部變量的地址 }
函數名和數組名不允許修改其地址;因為是常量;
函數指針:返回的是函數的類型數據
指針函數:返回的是一個指針地址
函數名和數組名一樣都是一個指針;即是地址