C语言指针函数和函数指针区别

C语言指针函数和函数指针区别C语言函数指针和指针函数的区别C和C++中经常会用到指针,和数据项一样,函数也是有地址的,函数的地址是存储其机器语言代码的内存的开始地址。指针函数和函数指针经常会混淆,一个是返回指针的函数,另一个是指向函数的指针,下面就分别解释指针函数和函数指针的区别。一、指针函数指针函数是返回指针的函数主体是函数,返回值是一个指针基本声明形式:返回数据类型+*+函数名+(变量类型1,……

大家好,又见面了,我是你们的朋友全栈君。

C语言函数指针和指针函数的区别

C和C++中经常会用到指针,和数据项一样,函数也是有地址的,函数的地址是存储其机器语言代码的内存的开始地址。

指针函数和函数指针经常会混淆,一个是返回指针的函数,另一个是指向函数的指针,下面就分别解释指针函数和函数指针的区别。

一、指针函数

指针函数是 返回指针的函数 主体是函数,返回值是一个指针
基本声明形式:返回数据类型 + * + 函数名 + (变量类型1,…);
e.g :

int* fun(int,int);  
int * fun(int,int);
int *fun(int,int);

这三种声明都可以,第一种更加直观 返回值是 int* 类型

举个栗子:

#include<stdio.h>
int* fun(int* x)    //传入指针  
{
	int* tmp = x;	  //指针tmp指向x
    return tmp;       //返回tmp指向的地址
}
int main()
{
    int b = 2;      
    int* p = &b;   //p指向b的地址
    printf("%d",*fun(p));//输出p指向的地址的值
    return 0;
}

输出结果:2

二、函数指针

函数指针是 指向函数的指针 主体是指针 指向的是一个函数的地址
基本声明形式:返回数据类型 + (*函数名) + (变量类型1,…);
注意 * 和函数名要用括号括起来,否则因为运算符的优先级原因就变成指针函数了
e.g:

int (*fun) (int);
#include<stdio.h>
int add(int x,int y)
{
    return x + y;
}
int (*fun) (int,int);			//声明函数指针
int main()
{
    fun = &add;					//fun函数指针指向add函数
    printf("%d ",fun(3,5));		
    printf("%d",(*fun)(4,2));
    return 0;
}

输出结果:8 6
上面的样例中,使用函数指针时使用fun(3,5)(*fun)(3,5)都可以

函数指针的参数列表要和函数指针指向的函数的参数列表一致

主要记住指针函数是返回指针的函数而函数指针是指向函数的指针
在这个基础上可以有函数指针函数和指针函数指针之类的
指针函数声明的时候 * 和函数名不需要括号括起来
函数指针声明的时候 * 需要和函数名用括号括起来(优先级原因)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152183.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎么用手机连接电脑上网听语音

    怎么用手机连接电脑上网听语音

    2021年10月9日
    87
  • 蓝桥杯题目 计算后续日期

    蓝桥杯题目 计算后续日期蓝桥杯题目计算后续日期题目描述我们经常要计算 从今天往后 N 天之后是哪一天 哪年哪月哪日 现在我们就可以编写一个程序 推算指定日期之后的第 N 天是什么日期 输入输入有多组 每组测试用例有一行 包括四个整数 分别表示年 月 日和第 N 天 输出对于每组测试用例 输入由一行组成 表示 年月日 N 天后的 的年 月 日样例输入样例输出 2012

    2025年8月24日
    3
  • 在Linux(Ubuntu版)下编写运行C语言程序

    在Linux(Ubuntu版)下编写运行C语言程序    最初学习C语言用的是VisualC++6.0,后来还用过一些IDE,复制粘贴都可以用鼠标对目标进行选择即可。但在Linux系统里,需要熟练掌握在Terminal里编写C语言程序,进行编译调试。本章主要介绍在Linux的终端下编写C程序并编译运行。一,编写C时需要掌握的一些Linux操作(1)文件管理相关的命令Linux命令名称作用使用举例mkdir新建文件夹mkdirtest,m…

    2022年6月16日
    34
  • 使用动态IP+MDaemon架设邮件服务器

    先说吧,其实我是个菜鸟,写这篇教程的目的是希望能帮到像我这样辛苦摸索的朋友们,更高级的东西我不懂,所以请高人们能指点指点。最近和几个朋友以前在捣鼓MDaemon,在慢慢看教程跟摸索的情况下,了解了MD最基本的一些应用,下面我们就一步一步来做,目标是建立一个能收发外网的拥有顶级域名的内部邮件服务器。像我这样的属于穷鬼一族,只想少花钱,满电脑的软件全是D版,没办法,人穷志短,所以我们建立的这个邮件

    2022年4月6日
    38
  • ORA-00937:不是单组分组函数[通俗易懂]

    ORA-00937:不是单组分组函数[通俗易懂]例子:SELECTCOUNT(*)BZC144,NVL(SUM(BCF125),0)BZC145,CF11.AAA020FROMCF11,CF12WHERECF11.BCF110=CF12.BCF110ANDCF11.AAE100=’1′;在Oracle中PLSQL执行上面的语句就会出现,ORA-00937:不是单组分组函数.原因是:数据中有这么一…

    2022年6月26日
    82
  • SpringBoot事务详解

    SpringBoot事务详解一、定义  事务(transaction)是指业务逻辑上对数据库进行的一系列持久化操作,要么全部成功,要么全部失败。二、特性和实现  1、事务的四个基本性质(ACID)  1)原子性(Atomicity)     事务的原子性指事务是一个不可分割的工作单位,这组操作要么全部执行,要么全部不发生。     就拿银行转账来说,原子性指的是从A账户…

    2022年6月12日
    73

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号