C语言之辨别指针函数与函数指针

C语言之指针

一.简介

在c语言中,有时候我们对基本的概念很容混淆分不清楚,今天来区分一下函数指针,和指针函数,我是这样区分的,看谁在后面本质就是什么

  • 指针函数:本质就是函数
  • 函数指针:本质就是指针

二.指针函数

1.定义

指针函数就是定义一个函数其返回值类型为一个指针,如何来定义一个指针函数
声明格式:类型说明符 * 函数名 (参数)

int* function();
int *function();
int * function();

我这里返回值的类型以整形int为例,这三种写法都是可以的,*号的位置无所谓,个人感觉第一种好理解一些

2.示例

#include <stdio.h>

int *fun()
{
	static int a =10;
    return &a; 
 } 
 
 int main()
 {
	int *p=fun();
	printf("*p = %d", *p);
	return 0;
 }

3.运行结果

*p = 10

注意
int a = 10 前面加 static 来修饰的目的是,因为函数调用的时候申请栈区的一段地址空间,不加static 等调用结束,其他程序就有可能占用这片地址空间,会改变其里面的内容(当然我没加static我用vsCode 运行代码直接报错)

三.函数指针

1.定义

函数指针的本质就是指针我们可以理解为,它就是一个指向函数的指针
声明格式:类型说明符 (*函数名) (参数)

int (* function)();

函数指针是需要把一个函数的地址赋值给它,有两种写法:

function = &add; //add为另一函数的函数名
function = add; 

这两种写法都可以,因为函数名就可以标识它的地址

调用函数指针的方式也有两种:

x = (* function());
x = function();

2.示例

#include <stdio.h>

int add(int x, int y)
{
    return x + y;
}

int sub(int x, int y)
{
    return x - y;
}

//定义一个函数指针
int (* function)(int a, int b);

int main()
{
    //第一种写法
    function = add;
    //调用函数指针
    printf("%d\n", (* function)(2,3));

    //第二种写法
    function = &sub;
    printf("%d\n", (*function)(3,2));
}

3.结果

5
1

四.总结

1.记忆

函数指针和指针函数在记忆发面我是这样记忆的

用括号将 *括起来,说明指针的优先级高,它就是函数指针
没有括号的 函数的优先级大于指针,它就是指针函数

2.二者的区别

定义不同

  • 指针函数:本质就是函数,返回值为指针
  • 函数指针:本质就是指针,指向一个函数

写法不同

int (* function)(); //函数指针
int* function();  //指针函数

大家可以根据上面的例子来好好理解一下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值