函数指针:
int func(int x); /* 声明一个函数 */
void (*f) (int x); /* 声明一个函数指针 */
f=func; /*将func函数的首地址赋给指针f */
#include<stdio.h> int max(int a,int b){return a<b?b:a;} int min(int a,int b){return a<b?a:b;} int sum(int a,int b){return a+b;} int differ(int a,int b){return a-b;} void display(int a,int b,int (*p)(int a,int b)){ printf("%d ",sizeof(p)); printf("%d ",p(a,b)); } int main(){ int a,b; int (*pl)(int a,int b); while(~scanf("%d%d",&a,&b)){ puts("max: ");display(a,b,max); puts("min: ");display(a,b,min); puts("sum: ");display(a,b,sum); pl=differ; puts("differ ");printf("%d ",pl(a,b)); } return 0; }
指针函数:
返回值为地址;
定义:int *p(){};
#include<stdio.h> int *f(int *a){ for(int i=0;i<5;i++)a[i]=i;a[5]=NULL; return a; }; int main(){ int a[10],*p; p=f(a); p[5]=NULL; int i=0; while(i<5)printf("%d ",*(p+i++));puts("");//这时候不能++p,不解 while(i>0)printf("%d ",*(a+ --i));puts("");//这个++a就不能运行。不解 return 0; }
两者区别:
一、加不加括号;
二、一个是指针变量,一个是函数
关于函数字节:
#include <iostream>//对于所有硬件来说,所有指针是 8 个字节的宽度 int main() { std::cout << "sizeof(int*) == " << sizeof(int*) << " " "sizeof(double*) == " << sizeof(double*) << " " "sizeof(void(*)()) == " << sizeof(void(*)()) << std::endl; }