zhuwei9999 发表于 2019-11-26 17:39:15

形如:类型 *函数名[](参数1,参数2)={} 是什么??

下面是小甲鱼在SE30中的一段作业代码,请问各位大佬main函数里的double (*func_table)(double, double) = {add, sub, mul, divi};是什么操作??函数数组?
#include <stdio.h>
#include <stdlib.h>

#define EPSINON 0.000001 // 定义允许的误差

double add(double x, double y);
double sub(double x, double y);
double mul(double x, double y);
double divi(double x, double y);

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

double sub(double x, double y)
{
      return x - y;
}

double mul(double x, double y)
{
      return x * y;
}

double divi(double x, double y)
{
      // 不要对浮点数进行==或!=比较,因为IEEE浮点数是一个近似值
      if (y >= -EPSINON && y <= EPSINON)
      {
                printf("除数不能为0\n");
                // 如果除数为0,调用exit()函数直接退出程序
                exit(1);
      }
      else
      {
                return x / y;
      }
}

int main(void)
{
      int i;
      double x, y, result;
      double (*func_table)(double, double) = {add, sub, mul, divi};

      printf("请输入两个数:");
      scanf("%lf %lf", &x, &y);

      printf("对这两个数进行加减乘除后的结果是:");
      for (i = 0; i < 4; i++)
      {
                result = (*func_table)(x, y);
                printf("%.2f ", result);
      }
      putchar('\n');

      return 0;
<div>}</div><div>
</div>

bin554385863 发表于 2019-11-26 20:00:23

这是函数指针数组
相当于用一个数组来保存函数指针

dequantianhe 发表于 2019-11-27 13:11:14

下面是我的一个总结,关于各种指针数组,指针函数,函数指针,数组指针的定义规则,你可以看看,会有帮助的。
https://fishc.com.cn/thread-149705-1-1.html
当然,如果你感觉一头雾水,说明你应该先去看看小甲鱼的相关部分视频,指针函数和函数指针部分的。

如何定义各种复杂的指针,其根本是遵守一个原则,即该指针变量解引用后得到的值的类型必须和指向的那个数据的类型一致!(距离变量名最近的*号前的是解引用后的变量类型,*号后的内容是修饰指针本身的)
      举例:
      Int * p (int * 是p的类型,*p后得到的是int类型)
      Const int *p (const int * 是p的类型,*p后得到的是 const int类型)
      Const int * const p(const int * const 是p的类型,*p后得到的是const int 类型)
      Const int * const *p(const int * const* 是p的类型,*p后得到的是const int * const类型)
      Const int * const * const p(Const int * const * const是p的类型,*p后得到的是Const int * const类型)
      以此类推,都是一样的规律,这是小弟在学习指针时的一点心得总结,欢迎交流探讨!
页: [1]
查看完整版本: 形如:类型 *函数名[](参数1,参数2)={} 是什么??