栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言中,在结构体成员列表中添加函数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言中,在结构体成员列表中添加函数

目录

一.前言

二.C中结构体的几种基本用法

2.1.C中结构体基本说明

2.2.C中常见的结构体(结构体变量)的定义的几种方法

2.3.含函数名的结构体的定义和变量的定义


一.前言

前几天在看一个代码的时候,发现在结构体成员中出现了函数名,半天没有看懂,感觉有一点奇怪,后来查了一点资料,这里记录一下。

二.C中结构体的几种基本用法

2.1.C中结构体基本说明

        C中结构体的基本结构如下所示:

struct 结构体名{
    成员列表,
};

        struct是定义结构体的关键字,后面是你所定义的一种结构体的类型名,等效为int,float等C语言自带的数据类型名,成员列表是结构体所包含的成员。

2.2.C中常见的结构体(结构体变量)的定义的几种方法

第一种:只定义和声明一种新的结构体类型

struct Student{
    char name;
    int  year;
    int  id;
    float fraction;  // 分数
};



struct Student zhangsan;
struct Student lisi, wangwu;

这种结构体的定义和声明中,需要注意的地方就是在结构体变量的声明和定义中,不要忘记了关键字struct。

第二种:定义和声明结构体的同时,定义一个结构体变量

struct Student{
    char name;
    int year;
    int id;
    float fraction;
}lisi;



struct Student zhangsan;  // 方法一
zhangsan.id = 100;
lisi.id = 200;  // 方法二

这种与第一种的区别在于定义和声明结构体类型名的同时,定义了一个此类型的结构体变量lisi。

第三种:直接定义具有某种结构的结构体变量

struct {
    char name;
    int year;
    int id;
    float fraction;
}zhangsan;

zhangsan.id = 300;

这种方法的缺点就是下次要是再想定义此类型的结构体变量时,还是只能这样写,因为它没有定义一种新的结构体类型名。

第四种:使用关键字typedef为定义的结构体类型名定义一个新的类型名

typedef struct Student{
    char name;
    int year;
    int id;
    float fraction;
}student;



struct Student zhangsan;  // 方法一
student lisi;  // 方法二

在这种方法中使用关键字typedef使得student(别名)和struct Student(结构体类型名)有同样的功能,简化了后期结构体变量的定义,此时的student可以认为就是一种和int,float等类型名一样的,并且在定义变量时不再需要关键字typedef,目前最常用的就是这种了。

2.3.含函数名的结构体的定义和变量的定义
void function1(int a, int b)
{
    printf("a+b的值为:%drn",(a+b));
}
	
int function2(int c)
{
	printf("c的值为:%drn",c);
	return c;
}


struct Example{
    int a;
    int b;
    void (*function1)(int a, int b);
	int (*function2)(int c);
};


struct Example example = {10, 10, function1, function2};  // 指定结构体中各成员的具体意义
example.function1(1, 2);
example.function2(100);

代码运行的结果如下图所示:

这样以来可以看到,结构体中的变量可以执行。这里需要注意几点,一是在定义结构体的时候,函数名要以指针形式存在,结构体中函数的类型要与实际函数的类型对应,不然会报错;二是在使用结构体变量时要先声明各函数所对应的实际函数,然后函数就可以和普通的数据类型用“.”来调用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879419.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号