自从工作以后在代码过程中我就比较害怕遇到指针函数和函数指针,今日闲暇之空来整理一下:
一、指针函数:
定义:其本质就是一个函数,返回值是一个指针,也就是说是一个地址值;
构造类型: 类型标识符 * 函数名(参数表)
注:函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。
example:
#include<stdio.h>
#include<stdlib.h>
int *Add(int a, int b){
int sum=a+b;
int *p=(int*)malloc(sizeof(int));
p=∑
return p;
};
int main(){
int x1,x2;
int *sum;
scanf("%d",&x1);
scanf("%d",&x2);
sum=Add(x1,x2);
printf("sum地址:%p,sum=%d\n",sum,*sum);
return 0;
}
//代码可能过于简单,但是主要是能够理解就🆗
二、函数指针
定义:它是指向函数的指针变量,即本质是一个指针变量指向函数的指针包含了函数的地址,可以通过它来调用函数。
声明格式:类型说明符 (*函数名)(参数)
这个特殊的指针指向一个返回整型值的函数。指针的声明和它指向函数的声明保持一致
注:指针名和指针运算符外面的括号改变了默认的运算符优先级。如果没有圆括号,就变成了一个返回整型指针的函数的原型声明。
example:
#include<stdio.h>
int fun_multiply(int a,int b){
return a*b;
}
int main(){
int a,b;
int (*fun)(int a,int b);
scanf("%d",&a);
scanf("%d",&b);
fun=fun_multiply;
int resurt=fun(a,b);
printf("a*b=%d\n",resurt);
return 0;
}
//最后教如果还有小伙伴不太明白的教大家一个小技巧:看小扩号有没有和函数名前的*括一起,如果一起的话就是一个函数指针,如果不是一起就是一个指针函数。