C复习-函数指针+字符串常量

参考: 里科《C和指针》


指针热身

int *f(); // ()优先级高于*,所以f是一个函数,返回int指针
int (*f)(); // f是一个函数指针,它指向的函数返回一个int值
int *(*f)(); // f是一个函数指针,它指向的函数返回一个int指针
int *f[]; // []的优先级更高,所以是一个数组,但元素是int指针
int (*f[])(); // f是一个数组,其元素类型是函数指针,它指向的函数返回值是int
int *(*f[])(); // 同上,只是返回的是int指针

函数指针

用途:把函数指针作为参数传递给函数;转换表

// 声明
int f(int);
// &非必需,因为编译器会把函数名转化为函数指针,&只是显式说明
int (*pf)(int) = &f; 
// 使用
int ans;
ans = f(25);
ans = pf(25);
ans = (*pf)(25); // *只是显式说明
  1. 回调函数
// compare()在search_list()中用来比较值。这个函数可以处理多种类型的数据
// 声明
Node*
search_list(Node *node, void const *value,int (*compare)(void const *, void const *) );
// 使用
desired_node = search_list(root, &desired_value, compare);
  1. 转换表

比如设计一个计算器,如果有非常多的操作,整个switch会非常大,此时可以使用转换表:先声明并初始化一个函数指针数组,然后用一个语句替代switch。注意:需要始终验证下标的有效性。

// 原本的swithc
switch(oper) {case ADD:result = add(op1, op2);break;case SUB:result = sub(op1, op2);break;...
}//------使用转换表------------// 先写函数声明
double add(double, double);
double sub(double, double);
...
// 再初始化转换表
double (*oper_func[])(double, double) = {add, sub,...};
// 替换switch
result = oper_func[oper](op1, op2);

命令行参数

// argc是参数个数,argv是一个指针数组,其中的元素是指向字符串的指针
int
main( int argc, char **argv);

字符串常量

字符串常量实际是指针,下面是一些应用。

"xyz" + 1 // 是指向y的指针
*"xyz" // x
"xyz"[2] // z// 输入0~100,打印0~10个星号
void
mystery (int n)
{n += 5;n /= 10;print("%s\n", "**********" + 10 - n);
}// 打印余数。如果是十六进制的0~15,那直接[]转化成十六进制字符
putchar("0123456789ABCDEF"[value % 16]);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/140042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg简介1

适逢FFmpeg6.1发布,准备深入学习下FFmpeg,将会写下系列学习记录。 在此列出主要学习资料,后续再不列,感谢这些大神的探路和分享,特别是雷神,致敬! 《FFmpeg从入门到精通》 《深入理解FFmpeg》 …

Git版本控制系统之分支与标签(版本)

目录 一、Git分支(Branch) 1.1 分支作用 1.2 四种分支管理策略 1.3 使用案例 1.3.1 指令 1.3.2 结合应用场景使用 二、Git标签(Tag) 2.1 标签作用 2.2 标签规范 2.3 使用案例 2.3.1 指令 2.3.2 使用示例 一、Git分支&…

不知不觉已经在CSDN上发文200篇了...

一:大神推荐 认真的推荐一下我认识的大神, 也是我的良师益友: 孙哥链接:孙哥个人主页 大神简介:孙帅,前Oracle高级架构师,技术图书作者,18年软件开发经验。只做精品视频,…

分布式理论基础:CAP定理

什么是CAP CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)这三个基本需求,最多只能同时…

Unity Mirror学习(二) Command特性使用

Command(命令)特性 1,修饰方法的,当在客户端调用此方法,它将在服务端运行(我的理解:客户端命令服务端做某事;或者说:客户端向服务端发消息,消息方法&#xff…

几种解决mfc140.dll文件缺失的方法,电脑提示mfc140.dll怎么办

电脑提示mfc140.dll缺失,如果你不去处理的话,那么你的程序游戏什么都是启动不了的,如果你想知道有什么方法可以解决那么可以参考这篇文章进行解决,今天给大家几种解决mfc140.dll文件缺失的方法。电脑提示mfc140.dll也不用担心解决…

Qt贝塞尔曲线

目录 引言核心代码基本表达绘制曲线使用QEasingCurve 完整代码 引言 贝塞尔曲线客户端开发中常见的过渡效果,如界面的淡入淡出、数值变化、颜色变化等等。为了能够更深的了解地理解贝塞尔曲线,本文通过Demo将贝塞尔曲线绘制出来,如下所示&am…

基于SSM的数据结构课程网络学习平台

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

力扣刷题第十七天--哈希表篇

前言 本题与「15. 三数之和」相似,解法也相似。 内容 一、四数之和 18.四数之和 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (…

Java,多线程,线程的同步机制

线程的安全问题与线程的同步机制 以火车站买票的问题来举例。假设火车站有100张票,分三个窗口售卖这一百张票。 分别用继承Thread类和实现Runnable接口的方式: 实现Runnable接口: public class WindowTest {public static void main(Stri…

Git系列之分支与标签的使用及应用场景模拟

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《Git实战开发》。🎯🎯 &a…

Java学习_对象

对象在计算机中的执行原理 类和对象的一些注意事项 this关键字 构造器 构造器是一种特殊的方法 : 特殊之处在于,名字必须与所在类的名字一样,而且不能写返回值类型 封装 封装的设计规范:合理隐藏、合理暴露 实体类 成员变量和局部变量的区别 …

mybatisPlus update更新部分字段

第一种方式&#xff1a; 其中&#xff0c; lambdaUpdateWrapper.set 表示要更新的字段值。 .eq 则表示 WHERE 条件。 public void updateEntity() {// LambdaUpdateWrapper<TestEntity> lambdaUpdateWrapper new LambdaUpdateWrapper<>();//有些版本可能不兼容上…

微信聊天,收到二维码图片就自动帮你提取出来的方法

10-3 如果你是二维码收集的重度用户&#xff0c;那我非常推荐你好好阅读本文&#xff0c;也许可以帮你解决你的问题&#xff0c;比如做网推的人&#xff0c;需要常年混迹在各种微信群&#xff0c;那如何在各个微信群中收集到群友分享出来的二维码&#xff0c;并且要立即保存出…

SOLID 原则,程序设计五大原则,设计模式

SOLID 是让软件设计更易于理解、更加灵活和更易于维护的五个原则的简称。 单一职责(Single Responsibility Principle)&#xff1a;修改一个类的原因只能有一个。开闭原则(Open/Closed Principle)&#xff1a;对于扩展&#xff0c;类应该是“开放”的&#xff1b;对于修改&…

组件的设计原则

目录 插槽的基本概念 基础用法 具名插槽 使用场景 布局控制 嵌套组件 组件的灵活性 高级用法 作用域插槽 总结 前言 Vue 的 slot 是一项强大的特性&#xff0c;用于组件化开发中。它允许父组件向子组件传递内容&#xff0c;使得组件更加灵活和可复用。通过 slot&…

Python之函数进阶-nonlocal和LEGB

Python之函数进阶-nonlocal和LEGB nonlocal语句 nonlocal:将变量标记为不在本地作用域定义&#xff0c;而是在上级的某一级局部作用域中定义&#xff0c;但不能是全局作用域中定义。 函数的销毁 定义一个函数就是生成一个函数对象&#xff0c;函数名指向的就是函数对象。可…

在 React Router 中使用 JWT

在这篇文章中&#xff0c;我们将探讨 JWT 身份校验与 React 和 React-router 的无缝集成。 我们还将学习如何处理公共路由、受校验保护路由&#xff0c;以及如何利用 axios 库通过身份验证令牌&#xff08;token&#xff09;发出 API 请求。 创建一个 React 项目 使用下方的指…

华为云Ascend310服务器使用

使用华为云服务器 cpu: 16vCPUs Kunpeng 920 内存&#xff1a;16GiB gpu&#xff1a;4* HUAWEI Ascend 310 cann: 20.1.rc1 操作系统&#xff1a;Ubuntu aarch64目的 使用该服务器进行docker镜像编译&#xff0c;测试模型。 已知生产环境&#xff1a;mindx版本为3.0.rc3&a…

keep-alive缓存,三级路由不生效

此文章讲诉在vue中使用keep-alive缓存&#xff0c;三级路由缓存失败处理方案。 一二级路由缓存无任何问题&#xff0c;三级以上就会失败&#xff0c;因此我们在路由守卫中对matched做出如下优化 Router.beforeEach((to, from, next)>{if(to.matched && to.matched.l…