C语言函数指针数组

   最近在学习Java面向对象编程,同时发现C语言中也有类似面向对象的编程思想,比较突出的就是函数指针数组。

   例如Java中多个子类继承同一个父类,在子类中覆盖父类的方法,然后可也通过调用同一条遇见只是传入的对象不同来实现调用不同方法,源代码如下:

//抽象类Animal

public abstract interface Animal {

 public void Sound();

}

//实体类Cat

public class Cat implements Animal {

 public void Sound(){

  System.out.println("小猫叫:喵喵喵...");
 }
}

//实体类Dog

public class Dog implements Animal {

 public void Sound() {
  
  System.out.println("小狗叫:汪汪汪...");
 }

}

//测试类AnimalContainer

public class AnimalContainer {
 public static void main(String[] args) {
 Animal cat = new Cat();
 Animal dog = new Dog();
 AnimalContainer animalContainer = new AnimalContainer();
  animalContainer.animalSpeak(cat);
  animalContainer.animalSpeak(dog);
 }

 void animalSpeak(Animal animal){
  animal.Sound();
 }
}
  我现在用C语言函数指针数组的使用可以实现同样的功能,即同一函数通过参数不同调用不同函数,源代码如下:

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

enum animal{DOG,CAT};

void Dog_speak();
void Cat_speak();
void (*Speak[])(void) = {Dog_speak,Cat_speak};<pre name="code" class="objc">

int main()
{
  Speak[DOG]();
  Speak[CAT]();
	return 0;
}
void Dog_speak()
{
	printf("wangwang");
}
void Cat_speak()
{
	printf("miaomiao");
}

 

运行结果如下:

大家可能会说这代码不是也可以用switch语句直接代替啊。

其实我觉着用函数指针数组有她的好处,当决定添加新的函数时,急需把它加入到

enum animal{DOG,CAT,TIGER};

void (*Speak[])(void) = {Dog_speak,Cat_speak,Tiger_speak};

函数指针数组让代码容易管理,她们让代码更短,更容易扩展,可以提高C编程技巧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值