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 = ⊂
printf("%d\n", (*function)(3,2));
}
3.结果
5
1
四.总结
1.记忆
函数指针和指针函数在记忆发面我是这样记忆的
用括号将
*
括起来,说明指针的优先级高,它就是函数指针
没有括号的 函数的优先级大于指针,它就是指针函数
2.二者的区别
定义不同
- 指针函数:本质就是函数,返回值为指针
- 函数指针:本质就是指针,指向一个函数
写法不同
int (* function)(); //函数指针
int* function(); //指针函数
大家可以根据上面的例子来好好理解一下