首页技术指针函数类型,函数指针和指针函数用法和区别

指针函数类型,函数指针和指针函数用法和区别

编程之家2026-06-22618次浏览

本篇文章给大家谈谈指针函数类型,以及函数指针和指针函数用法和区别对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

指针函数类型,函数指针和指针函数用法和区别

c语言指针型函数

没区别,如果两个指针中间只有一个*就是两个指针(指针是地址是整数)相乘;指针内容*p是有类型的,编译器会对指针内容进行检查,如果类型匹配乘法运算(或*重载运算),就可以通过编译和运算。kp和pm是指针*kp和*pm是指针内容(k和m),*kp**pm实质就是两个指针内容进行相乘(k*m)。

C语言中,指针函数和函数指针有什么区别

在C语言中指针函数和函数指针是两个不同的概念,不能混淆。

指针函数本质上是函数,是一个返回类型为指针的函数,如:

int* max(int*array,int n)

{

//找最大值的地址

指针函数类型,函数指针和指针函数用法和区别

return最大值的地址;

}

max就是一个指针函数。

而函数指针本质上是指针,是指向函数的指针,如:

int(*funp)(int a,int b);

funp就是一个函数指针,可以用它指向一个返回类型为int、有两个int类型的参数的函数。

指针函数类型,函数指针和指针函数用法和区别

函数指针定义

函数指针:

函数指针是指向函数的指针变量。因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。

函数指针的声明方法为:

返回值类型(*指针变量名)([形参列表]);

注1:“返回值类型”说明函数的返回类型,“(指针变量名)”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:

int func(int x);/*声明一个函数*/

int(*f)(int x);/*声明一个函数指针*/

f=func;/*将func函数的首地址赋给指针f*/

或者使用下面的方法将函数地址赋给函数指针:

f=&func;

赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。

注2:函数括号中的形参可有可无,视情况而定。

下面的程序说明了函数指针调用函数的方法:

例一、

#include<stdio.h>

int max(int x,int y){return(x>y? x:y);}

int main()

{

int(*ptr)(int, int);

int a, b, c;

ptr= max;

scanf("%d%d",&a,&b);

c=(*ptr)(a,b);

printf("a=%d, b=%d, max=%d", a, b, c);

return 0;

}

ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心。

不过,在某些编译器中这是不能通过的。这个例子的补充如下。

应该是这样的:

1.定义函数指针类型:

typedef int(*fun_ptr)(int,int);

2.声明变量,赋值:

fun_ptr max_func=max;

也就是说,赋给函数指针的函数应该和函数指针所指的函数原型是一致的。

例二、

#include<stdio.h>

void FileFunc()

{

printf("FileFunc\n");

}

void EditFunc()

{

printf("EditFunc\n");

}

void main()

{

typedef void(*funcp)();

funcp pfun=FileFunc;

pfun();

pfun=EditFunc;

pfun();

}

OK,本文到此结束,希望对大家有所帮助。

天工ai是什么软件(天工ai是哪家公司的)aigc 是什么(3分钟,告诉你AIGC、AIGS、AIGF是什么)