结构体
结构体
为什么会出现结构体
为了表示一些复杂的数据,而普通的基本类型的变量无法满足要求
什么叫结构体
结构体是用户根据自己的实际需要定义的复合数据类型
#include <stdio.h> #include <string.h> struct Student { int sid; char name[200]; int age; }; //分号不能省 int main() { struct Student st = {1000, "zhangyan", 20}; printf("%d %s %d\n",st.sid, st.name, st.age); st.sid = 99; //st.name = "lisi"; //error strcpy(st.name, "lisi"); st.age = 20; printf("%d %s %d\n",st.sid,st.name, st.age); return 0; }
如何使用结构体
两种方式:
struct Student st = {1000, "zhangyan", 20};
struct Student * pst = &st;
1. 通过结构体变量名来实现:st.sid
2.通过指向结构体变量的指针来实现【重点】
pst -> sid pst这个指针变量所指向的结构体变量中的的sid这个成员(通常使用第二个)
注意事项:
结构体变量不能加减乘除,但可以相互赋值
普通结构体变量和结构体指针变量作为函数传参的问题
#include <stdio.h> #include <string.h> struct Student { int sid; char name[200]; int age; }; //分号不能省 void f(struct Student * pst); void g(struct Student st); void g2(struct Student * ); int main() { struct Student st; //已经为st分配好地址 f(&st); g2(&st); //printf("%d %s %d\n", st.sid, st.name, st.age); return 0; } //这种方式耗内存,耗时间,不推荐 void g(struct Student st) { printf("%d %s %d\n", st.sid, st.name, st.age); } void g2(struct Student *pst) { printf("%d %s %d\n", pst->sid, pst->name, pst->age); } void f(struct Student * pst) { (*pst).sid = 99; strcpy(pst->name, "zhangsan"); pst->age = 22; }
#include <stdio.h> #include <malloc.h> struct Student { int sid; int age; }; struct Student * CreatStudent(void); void ShowStudent(struct Student *); int main() { struct Student * ps; ps = CreatStudent(); ShowStudent(ps); return 0; } void ShowStudent(struct Student * pst) { printf("%d %d\n",pst->sid,pst->age); } struct Student * CreatStudent(void) { struct Student * p = (struct Student *)malloc(sizeof(struct Student )); p->sid = 88; p->age = 99; return p; };