关于指针函数以及函数指针的一些理解

函数指针:

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;
}

  

原文地址:https://www.cnblogs.com/handsomecui/p/5007056.html