指针函数
指针函数就是一个返回指针的函数,其本质是一个函数,该函数的返回值是一个指针。
声明一个指针函数
int* fun(int x,int y);
例子
typedef struct _Data{
int a;
int b;
}Data;
//指针函数
Data* f(int a,int b){
Data * data = new Data;
data->a = a;
data->b = b;
return data;
}
int main(void)
{
//调用指针函数
Data * myData = f(4,5);
printf("%d,%d",myData->a,myData->b);
return 0;
}
函数指针
函数指针的本质就是一个指针变量,该指针指向一个函数的地址(函数的首地址)。如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。那么这个地址我们就可以用指针变量来存储。
声明一个函数指针
int(*fun)(int,int);
/*注意这里的(*fun)的括号千万不能省略,如果省略了就是一个指针函数了*/
给函数指针赋值
fun=&Function; //Function是一个函数名
fun=Function; //Function是一个函数名
/*两种方法都可以都是一样的*/
调用函数指针
int c; //存放函数返回值
c=(*fun)(x,y); //x,y是函数的参数
c=fun(x,y); //x,y是函数的参数
/*两种都可以,都一样*/
例子:
#include "stdio.h"
int Max(int x,int y);
int main(void)
{
int(*fun)(int,int);
fun=Max;
printf("MAX=%d",fun(3,5));
return 0;
}
int Max(int x,int y)
{
if(x>y)return x;
else return y;
}
结构体中定义函数指针
在C语言的struct中只有成员,不能有函数,但是可以有指向函数的指针,这也就方便了我们使用函数了。
两种定义方式
1、
#include "stdio.h"
int Max(int, int);
struct Function {
int(*fun)(int, int) = Max;
};
int main(void)
{
struct Function Fun;
//Fun.fun = Max;
printf("MAX=%d",Fun.fun(2,3));
return 0;
}
int Max(int x, int y)
{
int z;
if (x > y)
z = x;
if (x < y)
z = y;
return z;
}
2、
#include "stdio.h"
int Max(int, int);
struct Function {
int(*fun)(int, int);
};
int main(void)
{
struct Function Fun;
Fun.fun = Max;
printf("MAX=%d",Fun.fun(2,3));
return 0;
}
int Max(int x, int y)
{
int z;
if (x > y)
z = x;
if (x < y)
z = y;
return z;
}
总结:
以上就是我这次分享的一写C语言的指针用法。