【编程语言 · C语言 · 函数指针】

这篇具有很好参考价值的文章主要介绍了【编程语言 · C语言 · 函数指针】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

函数指针

由于指针可以指向任何存储器位置中的地址,因此它们也可以指向可执行代码的开头。

函数指针或函数指针指向内存中函数的可执行代码。函数指针可以存储在数组中,也可以作为参数传递给其他函数。

函数指针声明使用 * 就像使用任何指针一样:

return_type (*func_name)(parameters) 

(*func_name)  周围的括号很重要。没有括号,编译器会认为函数在返回指针。

声明函数指针后,必须将其分配给函数。

下面的简短程序声明一个函数,声明一个函数指针,将该函数指针分配给该函数,然后通过该指针调用该函数:

#include <stdio.h>
void say_hello(int num_times); /* function */

int main() {
  void (*funptr)(int);  /* function pointer */
  funptr = say_hello;  /* pointer assignment */
  funptr(3);  /* function call */
    
  return 0;
}

void say_hello(int num_times) {
  int k;
  for (k = 0; k < num_times; k++)
    printf("Hello\n");
}

函数名称指向可执行代码的开头,就像数组名称指向其第一个元素一样。

因此,尽管诸如 funptr = &say_hello 和  (*funptr)(3)  之类的语句是正确的,但在函数分配和函数调用中不必包括地址运算符&和间接运算符*。

【选词填空】声明一个函数sum,该函数返回其参数之和,并声明一个指向sum的函数指针psum。

int sum(int a, int b) {
  return a  b;
}

int (  psum)(int, ) = ;

*

sum

int

+

函数指针数组

函数指针数组可以替换开关或if语句以选择动作,如以下程序所示:

#include <stdio.h>

int add(int num1, int num2);
int subtract(int num1, int num2);
int multiply(int num1, int num2);
int divide(int num1, int num2);

int main() 
{
  int x, y, choice, result;
  int (*op[4])(int, int);

  op[0] = add;
  op[1] = subtract;
  op[2] = multiply;
  op[3] = divide;
  printf("Enter two integers: ");
  scanf("%d%d", &x, &y);
  printf("Enter 0 to add, 1 to subtract, 2 to multiply, or 3 to divide: ");
  scanf("%d", &choice);
  result = op[choice](x, y);
  printf("%d", result);
    
  return 0;
}

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

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

int multiply(int x, int y) {
  return(x * y);
}

int divide(int x, int y) {
  if (y != 0)
    return (x / y);
  else
    return 0;
}

 int (*op[4])(int, int); 语句声明函数指针的数组。每个数组元素必须具有相同的参数和返回类型。

在这种情况下,分配给数组的函数具有两个int参数并返回一个int。

【填空题】调用funcs数组指向的函数。

// suppose f1, f2, and f3 are declared
void (*funcs[3])() = {f1, f2, f3};
for (int ix = 0; ix < ; ix++) {
  [ix](); 
}文章来源地址https://www.toymoban.com/news/detail-497778.html

到了这里,关于【编程语言 · C语言 · 函数指针】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 编程语言MoonBit新增矩阵函数的语法糖

    1. 新增矩阵函数的语法糖 新增矩阵函数的语法糖,用于方便地定义局部函数和具有模式匹配的匿名函数: 2. 新增使用 T::{ ... } 构造结构体的语法 这个新语法可用于显式的指定结构体的类型,并会使得结构体内有更好的补全: 3. 正式移除 var id = expr 的语法 4. 增加了新的关键

    2024年01月23日
    浏览(37)
  • c语言编程中出现错误: 表达式必须包含指向对象的指针类型。 该错误如何解决? 下文解答

    表达式必须包含指向对象的指针类型,但他具有类型\\\"int\\\" 具体原因是因为arr数组本质是一个指针类型,指向的是首元素的地址,如果用int 来接收显然不合适,以至于在引用下列定义的int类型的变量时候产生错误——表达式必须包含指向对象的指针类型,但他具有类型\\\"int\\\",解决

    2024年02月11日
    浏览(39)
  • 函数探秘:深入理解C语言函数,实现高效模块化编程

    ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog 在数学中我们就知道了函数这个概念,而C语言同样引入了函数这个概念,那C语言的函数到底是什么样的呢? 在C语言中, 函数也叫子程序,它是一段可以

    2024年03月09日
    浏览(51)
  • 掌握Go语言:Go语言递归函数,解密编程之谜,探索算法的奥秘!(27)

    递归函数是指在函数内部调用自身的函数。在Go语言中,递归函数使用起来非常方便,但需要注意递归的终止条件,以避免无限循环。 Go语言递归函数的使用方法 在Go语言中,编写递归函数的基本步骤如下: 上述三点内容详细解释如下: 定义一个函数,函数内部调用自身 :

    2024年04月15日
    浏览(38)
  • 什么是栈,为什么函数式编程语言都离不开栈?

    ​ 栈是一种具有特殊访问方式的存储空间,它的特殊性在于, 最后进入这个空间的数据,最先出去 ,可以画图来描述一下这种操作方式。 假设有一个盒子和三本书,依次将三本书他们放入盒子中。 入栈模拟图 ​ 现在有一个问题,如果一次只能取一本,我们如何将书从盒子

    2024年02月06日
    浏览(59)
  • Hlang--用Python写个编程语言-函数与基本数据结构实现

    okey,经过一段时间的努力,接下来要实现的是函数。当然还有对应的基本数据结构,那么之后的话,我们的工作就开始进一步转换了。 那么在这块我们要实现的有: 函数的定义 String类型的实现 列表类型的实现 实话实话,这个的实现是相当简陋的。不过作为一个小模型,应该

    2024年02月12日
    浏览(37)
  • 【跟小嘉学 Rust 编程】十三、函数式语言特性:迭代器和闭包

    【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学 Rust 编程】六、枚举

    2024年02月11日
    浏览(48)
  • 100天精通Golang(基础入门篇)——第15天:深入解析Go语言中函数的应用:从基础到进阶,助您精通函数编程!(进阶)

    🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批

    2024年02月12日
    浏览(60)
  • Lua中文语言编程源码-第六节,更改lmathlib.c 数学库函数, 使Lua加载中文库关键词(与数学库相关)

    源码已经更新在CSDN的码库里: 在src文件夹下的lmathlib.c 数学库 函数,Standard mathematical library:表明这个C源文件实现了Lua的标准数学库(Standard mathematical library),即提供了与数学相关的API和功能实现。 增加中文版mathlib数学函数名列表,保留英文版mathlib数学函数名列表。 原

    2024年03月27日
    浏览(71)
  • GO编程语言:简洁、高效、强大的开源编程语言

    在现代软件开发领域,随着应用复杂度的不断提升,开发人员对编程语言的需求也日益增长。GO编程语言,作为一种简洁、高效且具备强大并发能力的新型开源编程语言,逐渐成为了许多开发者的首选。本文将详细介绍GO语言在哪些项目开发中表现出色,以及为什么许多开发者

    2024年02月02日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包