重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
STU f (STU a)
创新互联长期为上1000家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为新安企业提供专业的成都做网站、成都网站建设,新安网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。
{ STU b={"Zhao", 'm', 85, 90};
int i;
strcpy( a.name, b.name );
a.sex = b.sex;
for ( i=0; i2; i++ ) a.score[i] = b.score[i];
以上是将b中的数据赋值给a,相当于a=b;这样的一个操作
return a;
}
main()
{ STU c= { "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\n", c.name, c.sex, c.score[0], c.score[1]);
}
输出结果为:A) Zhao,m,85,90, Qian,f,95,92
不能,只能放数据,想要放函数的话,搞一个指向函数的指针,把指针放进结构体里就可以了。
C语言中结构体和函数有着本质上的不同。
结构体是用户自己定义的一中数据类型,比如说你想要把学生信息作为一个整体存放在一个数据类型中,可以定义结构体,其中某个成员存放学号,某个存放姓名等等。
但是函数就完全不同了,函数是为了实现某种功能,比如你要在一堆学生中寻找某一个学生可以用函数来实现。
void f(A c) /* 注意:c结构变量名 但这个c也是个复制品,与原实参只是一样的内容,却不是同一个!! */ 所以结果还是a={1,2}; 答案为B
如果在结构体定义时,或定义后取了别名,可以用别名,否则不能省“struct”
如:typedef
struct
Teacher
TEACHER;
则可以用TEACHER
代替struct
Teacher
C语言的结构体没有存取控制权限,相当于C++存取控制权限中的public:
追问:
那struct
Teacher
*creat(struct
Teacher
*head);
和Teacher
*creat(struct
Teacher
*head);
一样吗?如果不一样的话有什么区别呢?
追答:
是一样的,struct
Teacher
和Teacher只是同一东西的两种不同写法。
c语言的结构体是一组数据的组合,并不是简单的单一类型。所以在查找和输出的时候,均不能直接操作,而是要进行变通。
1
查找。
对于以某一项为关键字进行查找时,比如在结构体中有int型的成员a,要查找a为100的结构体变量,这时需要遍历每个结构体(数组、链表、或者其它任意形式),对每个元素的成员a值进行比较,符合的则表示查找成功。
对于结构体中元素较多,同时要对整个结构体每个元素都匹配才算查找到的特殊情况,可以使用memcmp的方式,整体进行比较,以减少代码量。不过这种情况较为少见,不过多描述。
2
输出。
对于结构体的输出,其实就是对其每一项,或者若干项成员变量的输出。
所以可以使用基本的输出函数,对每一项单独输出,输出中为了方便阅读,可以加一些说明文字。
如果对结构体输出有多处调用的需求,可以在将该功能封装为函数,供各个需要的函数调用。这样的好处是,当结构体的成员出现变化,或者结构体输出要求更改时,修改一处代码即可完成所有的输出修改,实现易于维护的效果。