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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 上下文无关文法产生的语言都可以用正则文法来描述_c语言结构体默认值

    上下文无关文法产生的语言都可以用正则文法来描述_c语言结构体默认值对于文法G=(V,T,S,P),如果产生式的形式如下:A->xBA->x其中A,B属于V,x属于T*,则称为右线性文法;相似的,如果产生式的形式如下:A->BxA->x则称为左线性文法。右线性文法和左线性文法统称为正则文法。正则表达式的表达能力等价于正则文法,正则表达式的定义如下:字母表中的任意字母是正则表达式,空串和空集也是正则表达式;如果r,s…

    2025年8月5日
    4
  • C语言实战小项目(三)通讯录

    C语言实战小项目(三)通讯录用 C 语言简单实现通讯录

    2025年12月5日
    5
  • 配置catalina.out的日志格式[通俗易懂]

    配置catalina.out的日志格式[通俗易懂]启动Tomcat时,catalina.out中输出的日志格式可能不太理想。看看某些版本默认的格式:四月24,20186:49:32下午org.apache.catalina.startup.Catalinastart信息:Serverstartupin9772ms有点别扭,想要调整成下面的格式:24-Apr-201818:52:16.13…

    2022年5月9日
    53
  • Python元编程

    1.概述Python元编程有两种方法,一是采用类似“装饰器”的工具对基本元素(例如函数、类、类型)内审和对其进行实时创建和修改,二是运用类型"元类"的方式对类实例的创建过程进行

    2021年12月18日
    57
  • ubuntu eclipse 乱码「建议收藏」

    ubuntu eclipse 乱码「建议收藏」今天,把windows下的工程导入到了Linux下eclipse中,由于以前的工程代码,都是GBK编码的(Windows下的Eclipse默认会去读取系统的编码,所以Widnwos下的Eclipse的编码为GBK),而Ubuntu默认是不支持GBK编码的。所以,首先我们要先让Ubuntu支持GBK,方法如下:修改/var/lib/locales/supported.d/local文

    2022年5月25日
    38
  • Matlab画图 线条的颜色、宽度等相关设置

    Matlab画图 线条的颜色、宽度等相关设置线条的属性有:Color——颜色、LineWidth——线条宽度、LineStyle——线型、LineJoin——线条边角的样式、AlignVertexCenters——锐化垂直线和水平线线条属性的默认值为([0,0,0],’-‘,’0.5′,’round’,’off’)颜色、线型、一、线条颜色二、线条宽度线条宽度的默认值为0.5,线条宽度只能指定正值。三、线条类型实例:plot(t…

    2022年5月29日
    422

发表回复

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

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