指针函数

指针函数就是一个返回指针的函数,其本质是一个函数,该函数的返回值是一个指针。
声明一个指针函数

int* fun(int x,int y);

例子

typedef struct _Data{int a;int b;
}Data;//指针函数
Data* f(int a,int b){Data * data = new Data;data->a = a;data->b = b;return data;
}int main(void)
{//调用指针函数Data * myData = f(4,5);printf("%d,%d",myData->a,myData->b);return 0;
}

函数指针

函数指针的本质就是一个指针变量,该指针指向一个函数的地址(函数的首地址)。如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。那么这个地址我们就可以用指针变量来存储。
声明一个函数指针

int(*fun)(int,int);
/*注意这里的(*fun)的括号千万不能省略,如果省略了就是一个指针函数了*/

给函数指针赋值

fun=&Function; //Function是一个函数名
fun=Function; //Function是一个函数名
/*两种方法都可以都是一样的*/

调用函数指针

int c; //存放函数返回值
c=(*fun)(x,y); //x,y是函数的参数
c=fun(x,y); //x,y是函数的参数
/*两种都可以,都一样*/

例子:

#include "stdio.h"
int Max(int x,int y);
int main(void)
{int(*fun)(int,int);fun=Max;printf("MAX=%d",fun(3,5));return 0;
}
int Max(int x,int y)
{if(x>y)return x;else return y;
}

结构体中定义函数指针

在C语言的struct中只有成员,不能有函数,但是可以有指向函数的指针,这也就方便了我们使用函数了。
两种定义方式
1、

#include "stdio.h"int Max(int, int);
struct Function {int(*fun)(int, int) = Max;
};
int main(void)
{struct Function Fun;//Fun.fun = Max;printf("MAX=%d",Fun.fun(2,3));return 0;
}
int Max(int x, int y)
{int z;if (x > y)z = x;if (x < y)z = y;return z;
}

2、

#include "stdio.h"int Max(int, int);
struct Function {int(*fun)(int, int);
};
int main(void)
{struct Function Fun;Fun.fun = Max;printf("MAX=%d",Fun.fun(2,3));return 0;
}
int Max(int x, int y)
{int z;if (x > y)z = x;if (x < y)z = y;return z;
}

总结:

以上就是我这次分享的一写C语言的指针用法。

C语言中的指针应用,函数指针,指针函数,结构体中定义函数指针。相关推荐

  1. 【C语言】宏offsetof的模拟实现 (计算结构体中某变量相对于首地址的偏移)

    首先我们应该特别留意 : offsetof 是一个宏,并非是一个函数 ! 宏offsetof的介绍 : 参数:第一个是结构体类型名称,第二个是结构体成员名 返回类型:size_t无符号整形 引用的头文 ...

  2. c/c++中typedef详解(此文对typedef用于结构体的定义说明得很清楚到位)

    1. typedef 最简单使用 [c-sharp] view plain copy typedef long byte_4; // 给已知数据类型long起个新名字,叫byte_4 你可以在任何需要 ...

  3. C/C++语言100题练习计划 84——分数线划定(结构体+快排函数)

    名人说:故立志者,为学之心也:为学者,立志之事也.-- 王阳明 进度:C/C++语言100题练习计划专栏,目前84/100

  4. 结构体中的函数指针(c语言里一种思想)

    阅读raft源码的时候看到结构体里面的void(*xx) 看不懂这个地方,看上去又像面向对象的类方法,但是这是c语言的结构体啊,了解了这是函数指针.小趴菜~ 一.函数指针 函数指针是指向函数的指针变量 ...

  5. C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例

    C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例 目录 一.简单介绍 二.结构体定义和使用 三. ...

  6. c语言的结构体能存放函数吗,在C语言结构体中添加成员函数

    我们在使用C语言的结构体时,经常都是只定义几个成员变量,而学过面向对象的人应该知道,我们定义类时,不只是定义了成员变量,还定义了成员方法,而类的结构和结构体非常的相似,所以,为什么不想想如何在C语言结 ...

  7. c语言volatile 结构体,volatile一般用来修饰结构体中的成员变量吗?

    保留字肯定就是关键字撒, (1)auto 这个这个关键字用于声明变量的生存期为自动,即将不在任何类.结构.枚举.联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量.这个关键字不怎么多 ...

  8. 【软件开发底层知识修炼】二十五 ABI之函数调用约定二之函数返回值为结构体时的约定

    上一篇文章学习了几种函数调用约定的区别,点击链接查看上一篇文章:[软件开发底层知识修炼]二十四 ABI之函数调用约定 本篇文章继续学习函数调用约定中,关于函数返回值的问题.当函数返回值为结构体时,函数 ...

  9. Rust中结构体的定义和实例化

    文章目录 使用字段初始化简写语法 使用结构体更新语法从其他实例创建实例 使用没有命名字段的元组结构体来创建不同的类型 没有任何字段的类单元结构体 结构体和我们在"元组类型"部分论过 ...

  10. c语言中结构体头文件是什么,函数形参里有结构体指针,为什么在头文件生

    满意答案 lam950 2017.04.08 采纳率:59%    等级:8 已帮助:913人 C语言用结构体指针作函数参数 这种方式比用结构体变量作函数参数效率高,因为无需传递各个成员的值,只需传递 ...

最新文章

  1. 吴恩达机器学习笔记7-数据绘制
  2. linux内核微妙时,Linux内核模块时间同步函数汇总
  3. 人力资源数字化的入口——组织生产力数字模型
  4. Java 并发编程之同步工具类闭锁 CountDownLatch
  5. 机器视觉打光方案(NOMEX胶纸)
  6. ffmpeg中的sws_scale算法性能测试
  7. 反爬机制能绕过?动态ip代理来教你怎么做
  8. 基于深度学习的云反演-文献分析
  9. Python实现轮盘抽奖小程序(带界面)
  10. mysql next key_关于mysql next-key锁的一些个人理解
  11. jadx在windows下的安装
  12. linux shm open,undefined reference to \'shm_open\'解决办法-j_cle-ChinaUnix博客
  13. visual studio安装进度条为零,检查网络链接;aka.ms拒绝连接,因为使用的HSTS...;无法访问github.com;外网无法访问
  14. json数据条件查询,json数据sql查询中文乱码
  15. web前端学习第十四~十八天
  16. 没有盖兹 微软会更好?
  17. 年终考核 对你的上司,你是如何评价的
  18. 【时序】基于 TCN 的用于序列建模的通用卷积和循环网络的经验评估
  19. 正三角形c语言编程,三角形 (C语言代码)
  20. 云计算是把计算机资源放在什么上,云计算就是把计算机资源都放到什么上

热门文章

  1. 自编码器的原理及实现
  2. 1、ubuntu 安装docker
  3. 计算机入门及操作技能训练,计算机入门及操作技能训练模拟试题.doc
  4. [渝粤教育] 上海交通大学 流体力学 参考 资料
  5. python多线程破解压缩包_我用 Python 破解了同事的加密压缩包!
  6. swoole - 简介
  7. Mn0.15V2O5·nH2O锌离子电池正极材料的储锌性能/Co@CNTs催化改性MgH2|碳纳米管原位负载Co纳米颗粒(Co@CNTs)催化剂
  8. 数学英语词汇 (1)
  9. C语言——printf()函数参数传递问题
  10. html li spry,借助于spry实现Tab面板