`
xcxinghai
  • 浏览: 33529 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

C语言结构体中的函数指针与函数

 
阅读更多

1、函数指针

一般的函数指针可以这么定义:


int(*func)(int,int); 

表示一个指向含有两个int参数并且返回值是int形式的任何一个函数指针. 假如存在这样的一个函数:

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

那么在实际使用指针func时可以这样实现:
func=&add2; //指针赋值,或者func=add2; add2与&add2意义相同
printf("func(3,4)=%d\n",func(3,4));

事实上,为了代码的移植考虑,一般使用typedef定义函数指针类型.
typedef int(*FUN)(int,int);
FUN func=&add2; 
func();
2、结构体中包含函数指针其实在结构体中,也可以像一般变量一样,包含函数指针变量.下面是一种简单的实现.
#include "stdio.h"
struct DEMO
{
    int x,y;
    int (*func)(int,int); //函数指针
};
int add2(int x,int y)
{
    return x+y;
}
void main()
{
    struct DEMO demo;
    demo.func=&add2; //结构体函数指针赋值
    printf("func(3,4)=%d\n",demo.func(3,4));
}
上面的文件保存为mytest.c,在VC6.0和gcc4中编译通过.


3、结构体中的函数
既然C++在介绍类的时候说过,类是取代结构体的。可见结构体的功能并非我们平时用到的这么简单,没有太多人知道结构体中也可以有自己的函数成员。
举个例子:
#include "stdio.h"
struct DEMO
{
    int m;
    DEMO(int k) //构造函数
    { 
        this->m=k;
        printf("after init,m=%d\n",m);
     }
    void func()//一般函数
    {
         printf("function of struct.\n");
    }
};

void main()
{
    struct DEMO demo(33);
    demo.func();
}
保存为mytest1.c , VC6.0和gcc编译都会出错。这可能说明标准C是不支持结构体包括函数成员形式的(因为后缀.c使得VC或gcc选择c编译器)。 但是如果将文件后缀改为.cpp(也就是选择c++编译),就不再有错误了,得到结果:
after init,m=33
function of struct. 
也就是说,在C++中允许结构体包含函数成员,而标准C不支持。 进一步发现,c++中甚至允许结构体中含有构造函数、重载、public/private等等.这样看来,结构体真的与类越来越靠近相似了!

C++扩充了结构体的功能。但C++中为了介绍面向对象的类,却淡化了同样精彩的结构体。当我们写一些小程序而觉得没有必要去构造类的时候,选择结构体确实会方便很多。


推荐相关一篇博文

http://blog.csdn.net/bit_x/article/details/5658137






分享到:
评论

相关推荐

    如何在C语言的结构体中像类一样封装函数

    在C语言中,我们不能直接在结构体中定义`getArea`这样的成员函数,但可以通过在结构体中包含一个函数指针来实现类似的效果: ```c #include typedef int (*CalcAreaFunc)(struct Rectangle*); struct Rectangle ...

    C语言结构体实现方法

    在C语言中,结构体(struct)是一种复合数据类型,它允许我们将多个不同类型的变量组合成一个单一的实体。这使得我们能够以更模块化和组织化的方式处理数据。本篇将详细介绍C语言中结构体的实现方法以及规范的编码...

    C语言全套资料 C语言程序设计 C语言算法 C语言课件 C语言顺序程序设计,C语言数组,C语言循环控制,C语言预处理命令,C语言文件操作指针,C语言选择结构程序设计,C语言结构体与共用体,C语言文件操作,C语言函数

    11. **C语言结构体与共用体**:结构体允许创建复合数据类型,而共用体则在有限的内存空间内存储多种类型的数据。这两者在实现数据结构如链表、树等时非常有用。 12. **C语言函数**:函数是组织代码的基本单元,可以...

    详解C语言结构体中的函数指针

    这就是如何在C语言中利用结构体和函数指针实现一种类似面向对象编程的功能,尽管C语言本身并不支持面向对象特性。通过这种方式,我们可以在结构体中存储函数行为,使得结构体实例能够根据需要执行不同的操作。这种...

    C语言结构体知识汇总

    C语言结构体部分内容详解包括结构体定义及使用,结构体函数的定义及使用,指向结构体的指针

    C语言 结构体范例代码

    在C语言中,结构体(struct)是一种复合数据类型,它允许我们将多个不同类型的变量组合成一个单一的实体。这使得我们能够创建更复杂的数据结构,以更好地模拟现实世界中的对象或概念。以下是对“C语言 结构体范例...

    C语言实例循环嵌套数组指针函数结构体

    在C语言编程中,循环、嵌套、数组、指针、函数和结构体是核心概念,它们构成了C语言的强大功能和灵活性。以下是对这些概念的详细解释和实践应用。 一、循环 C语言中的循环主要有三种类型:for循环、while循环和do-...

    C语言结构体的用法.ppt

    C语言结构体的用法 结构体是一种复杂的数据类型,在C语言中经常使用。结构体的定义、使用和操作都是C语言程序设计中的重要知识点。 一、 结构体类型定义 结构体类型定义是指定义一个结构体的组织形式,但不分配...

    C语言结构体共2页.pdf.zip

    "C语言结构体共2页.pdf.zip"可能包含关于结构体的基本概念、定义、初始化、指针操作以及结构体数组和结构体指针的使用等内容。下面将详细介绍这些知识点。 1. **结构体定义**: 在C语言中,我们可以通过`struct`...

    关于在 C 语言结构体中使用函数指针的问题

    结构体是 C 语言中一个非常重要的自定义数据类型,它描述了一系列相同类型或不同类型数据构成的数据集合。但是在 C 语言的结构体成员却不...通过在结构体中定义函数指针类型的成员,从而实现了在结构体中使用函数的目的。

    详解C语言Struct(结构体)系列之一

    四、结构体中的函数与函数指针 结构体不仅限于数据,还可以包含函数。在C99标准中,结构体内可以声明函数,这些函数的作用域限制在结构体内,相当于其他语言中的方法。此外,结构体还可以包含函数指针,这样的设计...

    C语言函数指针与指针函数训练.zip

    在C语言中,函数指针和指针函数是高级特性,它们在编程中扮演着重要角色,尤其是在处理回调函数、动态调度以及实现元编程等方面。本训练将深入讲解这两个概念,帮助你掌握其核心概念和实际应用。 首先,我们要了解...

    C语言结构体、联合体、指针等

    ### C语言结构体、联合体、指针等 #### 一、结构体的深入理解 **1.1 结构体的概念** 结构体(`struct`)是C语言中的一种复合数据类型,它允许开发者将不同类型的数据组织在一起形成一个新的数据结构。这种特性极...

    C语言试题集(包括基础概念、函数、指针、结构体等等)

    - **结构体数组与结构体作为函数参数**:处理结构体数组,以及在函数间传递结构体的方式。 5. **预处理器**: - **宏定义**:理解宏替换的概念,如何使用#define定义简单的宏。 - **头文件包含**:学习#include...

    C语言用结构体指针作函数参数.doc

    C语言用结构体指针作函数参数

    C语言-数组、结构体与指针的综合应用实验报告

    【C语言-数组、结构体与指针的综合应用实验报告】 本次实验旨在掌握C语言中数组、结构体和指针的基本用法,以及初步理解链表的概念和操作。实验内容涉及设计一个结构体来存储学生信息,包括学号、姓名、三科成绩和...

    《C语言结构体》PPT课件.ppt

    本资源摘要信息涵盖了C语言结构体的基本概念、定义、嵌套定义、结构变量的定义和初始化、结构成员的引用、结构数组的定义和使用、结构指针的使用等知识点。 1. 结构体的概念和定义 结构体是一种新的构造数据类型,...

    C语言结构体和链表介绍

    在本篇文章中,我们将深入探讨结构体的定义、声明、初始化,以及如何通过指针和数组操作结构体,还将讨论结构体在函数参数中的传递。 首先,我们来看结构体的定义。在C语言中,我们可以使用`struct`关键字来定义一...

Global site tag (gtag.js) - Google Analytics