C语言中的指针应用,函数指针,指针函数,结构体中定义函数指针。

指针函数

指针函数就是一个返回指针的函数,其本质是一个函数,该函数的返回值是一个指针。
声明一个指针函数

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语言的指针用法。

猜你喜欢

转载自blog.csdn.net/qq_53000374/article/details/126730009