函数指针:
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\n",sizeof(p));
printf("%d\n",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\n",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*) << "\n"
"sizeof(double*) == " << sizeof(double*) << "\n"
"sizeof(void(*)()) == " << sizeof(void(*)()) << std::endl;
}