一、结构体的定义:
struct 结构名 {
成员类型 成员名;
成员类型 成员名;
};
特别注意:
1)要以struct开头
2)最后要使用分号
3)各成员之间用分号隔开
//实例:
struct student {
char name[16];
int age;
char tel[12];
};
二、结构的初始化和使用
#include <stdio.h>
struct student { //定义结构体数据类型 struct student
char name[16];
int age;
};
int main(void) {
struct student s1 = { //定义了一个struct student类型的变量 s1 并初始化
"eet", 28
}; //以分号结束
struct student s2; //定义了一个struct student类型的变量 s2
s2 = s1; //结构体变量之间可以直接赋值,s1每个成员的值都赋值给对应的s2每个成员的值,克隆
printf("%s, %d\n", s1.name, s1.age);
printf("%s, %d\n", s2.name, s2.age); //s1 和 s2 的值是一样的
return 0;
}
结构体成员的使用形式: 结构体变量.成员变量 (中间用 . 分隔)
三、使用结构体作为定义函数的参数
#include <stdio.h>
struct student{ //声明一个结构类型
char name[16];
int age;
};
void work(struct student stu){ //定义一个函数,函数参数是结构体
stu.age++;
printf("自定义函数里面年龄的值:%d\n",stu.age);
}
int main(void){
struct student s = {
"eet",15
};
work(s); //调用函数
printf("main主函数里面年龄的值:%d\n",s.age);
return 0;
}
执行结果: main 主函数年龄的值没有改变!
把年龄的值传递给自定义函数后,在自定义函数内部对结构体的值 stu(形参)进行修改后,并不会把值再传递到 main 函数结构体变量s,不会改变实际参数(实参)
主函数里面的值只负责传递,不负责接受外面函数运算后的值。除非结构体变量放在主函数外面作为全局变量,这样就可以实现!
注意:
一般不建议把结构体直接作为函数参数。
因为结构体的size比较大,直接传递,消耗性能!
解决方案:使用指针