结构体中的函数指针

C语言真是很灵活,今天发现结构中函数指针的应用,就查了些资料总结一下。其实在结构体已经和C++中的类功能差不多,只是其是面向过程,没有了作用域的要求,如public等你可以在结构体中定义函数函数指针,然后对其调用和类调用方法一样,在调用时对其赋值(你要调用的指针),这样看来,C也可以临时客串一下面向对象了。呵呵.大家可以试一下.

 

      1 #include<stdio.h>
      2 struct square
      3 {
      4         int length;
      5         int width;
      6         int height;
      7         int (*add)(int a,int b);
      8 };
      9 int square_add(int a,int b)
     10 {
     11         return a + b;
     12 }
     13 int bulk(int length,int width,int height) 
     14 {
     15         struct square squ =
     16         {
     17                 .length = length,
     18                 .width = width,
     19                 .height = height,
     20                 add:square_add,
     21         };
     22
     23         printf("Add() is %d\n",squ.add(100,200));
     24         printf("Length is %d\n",squ.length);
     25         printf("Width is %d\n",squ.width);
     26         printf("Height is %d\n",squ.height);
     27         return squ.length * squ.width * squ.height;
     28 }
     29 int main()
     30 {
     31         printf("The square is %d\n",bulk(100,200,300));
     32         return 0;
     33 }

 

C语言中的struct是最接近类的概念,但是在C语言的struct中只有成员,不能有函数,但是可以有指向函数的指针,这也就方便了我们使用函数了。举个例子,如下:

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

typedef struct student
{
int id;
char name[50];
void (*initial)();
void (*process)(int id, char *name);
void (*destroy)();
}stu;

void initial()
{
printf("initialization.../n");
}

void process(int id, char *name)
{
printf("process.../n%d/t%s/n",id, name);
}

void destroy()
{
printf("destroy.../n");
}

int main()
{
stu *stu1;
//在VC和TC下都需要malloc也可以正常运行,但是linux gcc下就会出错,为段错误,必须malloc
stu1=(stu *)malloc(sizeof(stu));

// 使用的时候必须要先初始化
stu1->id=1000;
strcpy(stu1->name,"xufeng");
stu1->initial=initial;
stu1->process=process;
stu1->destroy=destroy;

printf("%d/t%s/n",stu1->id,stu1->name);
stu1->initial();
stu1->process(stu1->id, stu1->name);
stu1->destroy();
free(stu1);
return 0;
}

------------------------------------

c语言中,如何在结构体中实现函数的功能?把结构体做成和类相似,让他的内部有属性,也有方法

这样的结构体一般称为协议类,提供参考:
struct {
int funcid;
char *funcname;
int (*funcint)(); /* 函数指针 int 类型*/
void (*funcvoid)(); /* 函数指针 void类型*/
};

每次都需要初始化,比较麻烦

 

 

 

 

 

 

 

 

posted @ 2013-04-10 12:17  ~风~  阅读(579)  评论(0编辑  收藏  举报