c语言中,如何在结构体中实现函数的功能?

c语言中,如何在结构体中实现函数的功能?,第1张

c语言的结构体是一组数据的组合,并不是简单的单一类型。所以在查找和输出的时候,均不能直接 *** 作,而是要进行变通。

1

查找。

对于以某一项为关键字进行查找时,比如在结构体中有int型的成员a,要查找a为100的结构体变量,这时需要遍历每个结构体(数组、链表、或者其它任意形式),对每个元素的成员a值进行比较,符合的则表示查找成功。

对于结构体中元素较多,同时要对整个结构体每个元素都匹配才算查找到的特殊情况,可以使用memcmp的方式,整体进行比较,以减少代码量。不过这种情况较为少见,不过多描述。

2

输出。

对于结构体的输出,其实就是对其每一项,或者若干项成员变量的输出。

所以可以使用基本的输出函数,对每一项单独输出,输出中为了方便阅读,可以加一些说明文字。

如果对结构体输出有多处调用的需求,可以在将该功能封装为函数,供各个需要的函数调用。这样的好处是,当结构体的成员出现变化,或者结构体输出要求更改时,修改一处代码即可完成所有的输出修改,实现易于维护的效果。

trans(node)                                       //改成trans(node)

void trans(struct linknode node[8])

{int o,i,m

for(o=0o<8o++)

   {for(i=0i<2i++)

     {m=node[o].near[i]

      for(i=0i<8i++)

          {if((node[m].dtc[i]+node[o].dtc[m])<=node[o].dtc[i])

              {node[o].dtc[i]=(node[m].dtc[i]+node[o].dtc[m])

              node[o].path[i]=m

              }

          }

      }

   }

}

改动如下:

#include <stdio.h>

#include<string.h>

enum gender

{

male,famale

}

typedef struct course

{

char coursename[10]

int coursescore

}STC

typedef struct student

{

long studentnumber

char name[20]

int age

enum gender sex

STC coursescore[3]

struct student *next

void (*ptooutput)(struct student*)// 改动1:改成指针,与output函数匹配

}STD

void output(struct student *p)

{

int i

printf("学生%s:\n",p->name)

printf("他的学号是%ld\n",p->studentnumber)// 改动2:学号

printf("他的年龄是%d\n",p->age)// 改动3:年龄

if(p->sex==0)

{printf("他的性别是男\n")}

else

{printf("他的性别是女\n")}

for(i=0i<3i++)

{

printf("他的%s",p->coursescore[i].coursename)

printf("成绩是%d\n",p->coursescore[i].coursescore)

}

}

main()

{

STD a

a.studentnumber=1011110201

strcpy(a.name,"叶超")

a.age=19

a.sex=male

strcpy(a.coursescore[0].coursename,"数学")

a.coursescore[0].coursescore=87

strcpy(a.coursescore[1].coursename,"英语")

a.coursescore[1].coursescore=72

strcpy(a.coursescore[2].coursename,"C语言")

a.coursescore[2].coursescore=66

a.ptooutput = output// 改动4:设置打印函数指针

a.ptooutput(&a)// 改动5:输入参数为指针

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/bake/11944625.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存