⑴ c语言结构体函数
STUf(STUa)
{STUb={"Zhao",'m',85,90};
inti;
strcpy(a.name,b.name);
a.sex=b.sex;
for(i=0;i<2;i++)a.score[i]=b.score[i];
以上是将b中的数据赋值给a,相当于a=b;这样的一个操作
returna;
}
main()
{STUc={"Qian",'f',95,92},d;
d=f(c);//这里传的c是个复制品(传递的不是结构体指针),所以c不会变,d接收f()函数的返回值,因为返回值的内容是f()中的b的值,所以,d与c不同
printf("%s,%c,%d,%d,",d.name,d.sex,d.score[0],d.score[1]);
printf("%s,%c,%d,%d ",c.name,c.sex,c.score[0],c.score[1]);
}
输出结果为:A)Zhao,m,85,90,Qian,f,95,92
⑵ C语言结构体类似函数吗
一、你所发来的图中,struct vote *create()这一句确实是一个函数!
二、它不是结构体,结构体定义语句没有括号,如:
struct vote
{
int a;
char name[20];
float score[3];
};
三、struct vote *create() 这条语句解释,
刚说它是一个函数,其中:
函数名:create
函数的参数:无
函数的返回值类型:是struct vote * 型,即返回值是指向结构体vote类型的指针。
四、最后回到你的疑问:
1、C语言结构体类似函数吗? 不是。
2、如图,struct vote *create(); 这语句算是调用函数吗?不是调用函数,而是定义函数。
3、如果算的话括号内不用形参之类的吗?既然是定义函数,括号内可以用形参,当然也可以选择不用形参。你发的例子就是不用参数的函数。
还有不明白之处,请留言。
⑶ 在c语言中 函数和结构体的区别
一个程序通常围绕这两个方面进行:数据存储和数据操作;
结构体是一种数据类型,用来将不同类型的数据组合在一起,决定数据的存储问题(比如在内存占多大的空间来,系统怎么解释存储数据的位数据啦等等)同int, double 等编译器内置的数据类型基本相同,只不过结构体是用户自己定义的数据类型而已,例如:
struct student
{
char name[20];
int NO;
};
函数是对数据的一种操作;
⑷ C语言——结构体/函数
#include<stdio.h>
#include<string.h>
#defineN(5)
structSTUDENT
{
charname[20];
intage;
floatchinese,math;
};
voidscan(structSTUDENT*a,intn);
voidprint(structSTUDENT*a,intn);
voidsort(void*a,intn,intsize,int(*cmp)(void*,void*));
intcmp_score(void*a,void*b);
intcmp_chinese(void*a,void*b);
intcmp_name(void*a,void*b);
intmain()
{
structSTUDENTa[N];
inti;
scan(a,N);
sort(a,N,sizeof(*a),cmp_score);
print(a,N);
sort(a,N,sizeof(*a),cmp_chinese);
print(a,N);
sort(a,N,sizeof(*a),cmp_name);
print(a,N);
return0;
}
voidscan(structSTUDENT*a,intn)
{
inti;
for(i=0;i<n;++i)
{
scanf(" %s%d%f%f",a[i].name,&a[i].age,&a[i].chinese,&a[i].math);
}
}
voidprint(structSTUDENT*a,intn)
{
inti;
for(i=0;i<n;++i)
{
printf("%s%d%f%f ",a[i].name,a[i].age,a[i].chinese,a[i].math);
}
}
voidsort(void*a,intn,intsize,int(*cmp)(void*,void*))
{
inti,j;
void*t=malloc(size);
for(i=0;i<n-1;++i)
{
for(j=0;j<n-i-1;++j)
{
if(cmp(a+size*j,a+size*(j+1)))
{
memcpy(t,a+size*j,size);
memcpy(a+size*j,a+size*(j+1),size);
memcpy(a+size*(j+1),t,size);
}
}
}
free(t);
}
intcmp_score(void*a,void*b)
{
return((structSTUDENT*)a)->chinese+((structSTUDENT*)a)->math<((structSTUDENT*)b)->chinese+((structSTUDENT*)b)->math;
}
intcmp_chinese(void*a,void*b)
{
return((structSTUDENT*)a)->chinese<((structSTUDENT*)b)->chinese;
}
intcmp_name(void*a,void*b)
{
returnstrcmp(((structSTUDENT*)a)->name,((structSTUDENT*)b)->name)>0;
}
⑸ c语言中,如何在结构体中实现函数的功能
c语言的结构体是一组数据的组合,并不是简单的单一类型。所以在查找和输出的时候,均不能直接操作,而是要进行变通。
1
查找。
对于以某一项为关键字进行查找时,比如在结构体中有int型的成员a,要查找a为100的结构体变量,这时需要遍历每个结构体(数组、链表、或者其它任意形式),对每个元素的成员a值进行比较,符合的则表示查找成功。
对于结构体中元素较多,同时要对整个结构体每个元素都匹配才算查找到的特殊情况,可以使用memcmp的方式,整体进行比较,以减少代码量。不过这种情况较为少见,不过多描述。
2
输出。
对于结构体的输出,其实就是对其每一项,或者若干项成员变量的输出。
所以可以使用基本的输出函数,对每一项单独输出,输出中为了方便阅读,可以加一些说明文字。
如果对结构体输出有多处调用的需求,可以在将该功能封装为函数,供各个需要的函数调用。这样的好处是,当结构体的成员出现变化,或者结构体输出要求更改时,修改一处代码即可完成所有的输出修改,实现易于维护的效果。