C语言-基于作为参数传递的索引值调用函数-函数指针数组

自由指针

感谢您抽出宝贵的时间阅读本文,在发布之前我一直在寻找答案,但是我对该语言非常陌生。我正在尝试做的练习来自《有效的C:专业C编程入门》一书。

这是我第一次学习语言,本书第二章的练习如下:

声明一个由三个函数指针组成的数组,并根据作为参数传入的索引值调用适当的函数

我不能完全确定我理解它的意思,但是我有一段我认为可以完成工作的代码。但是,我不确定我是否正确解释了它。这是我的代码:

#include <stdio.h>
#include <stdlib.h>

void f0(int x) {
  printf("I am f0 and in index location %d\n", x);
}

void f1(int x) {
  printf("I am f1 and in index location %d\n", x);
}

void f2(int x) {
  printf("I am f2 and in index location %d\n", x);
}

int main(void){

  void (*f0p)(int);
  f0p = &f0;

  void (*f1p)(int);
  f1p = &f1;

  void (*f2p)(int);
  f2p = &f2;

  void *array[3] = {f0p, f1p, f2p};

  for (int i = 0; i < 3; i++) {
    void (*program)(int);
    program = array[i];
    program(i);
  }
  
  return 0;
}

这在编译后有效并返回以下内容:

I am f0 and in index location 0
I am f1 and in index location 1
I am f2 and in index location 2

但是,我可以正确完成练习吗?我不认为我在技术上使用索引作为参数并调用该函数,但我是菜鸟。您提供的任何验证或纠正/教育将非常感谢。我今天花了很多时间!

埃里克·波斯蒂奇(Eric Postpischil)

void除非在特殊情况下,否则不应在函数指针和对象指针(包括之间转换指针

最好将数组声明为指向函数的指针数组:

void (*arrray[])(int) = { f0, f1, f2 };

并且可以在没有中间变量的情况下调用函数:

array[i](i);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C语言中的函数指针数组

来自分类Dev

以struct数组指针作为参数的函数,C语言

来自分类Dev

C函数指针数组

来自分类Dev

C语言中的函数指针,数组和左值

来自分类Dev

将指向char数组的指针作为函数的参数传递-C

来自分类Dev

将指针传递给char数组作为函数的参数-C

来自分类Dev

指针数组作为c函数中的参数

来自分类Dev

C++:访问作为函数参数传递的双指针数组指向的变量的值

来自分类Dev

C ++声明函数指针数组

来自分类Dev

C-函数指针数组

来自分类Dev

C ++更改作为函数参数传递的指针值

来自分类Dev

在C函数中传递指向数组的指针

来自分类Dev

C ++:通过函数传递指针数组的语法

来自分类Dev

C ++将指针数组传递给函数

来自分类Dev

将结构数组传递给函数作为指针(C)

来自分类Dev

将数组中的元素作为C函数中的指针传递

来自分类Dev

数组和指针在c中作为函数参数的区别

来自分类Dev

C const 指向 const struct 数组的指针作为函数参数

来自分类Dev

C语言中的函数。+ 数组

来自分类Dev

C函数指针行为,数组/数组指针行为

来自分类Dev

如何调用以指针数组为参数的函数?在C

来自分类Dev

如何调用以指针数组为参数的函数?在C中

来自分类Dev

了解C语言中的函数指针的问题

来自分类Dev

关于C语言中的函数指针

来自分类Dev

了解C语言中的函数指针的问题

来自分类Dev

C语言中的函数和指针

来自分类Dev

C语言中的函数指针-了解

来自分类Dev

C++ 从带有指针数组的函数内部调用函数

来自分类Dev

在Python中重现C函数指针数组