结构体是一种新的数据类型
1 struct student{ 2 int ID; 3 char name; 4 }; //声明一个结构体,student只是结构体的一个标签,在一个程序中可能有多个结构体 5 struct student stu1 //用结构体来声明一个变量 6 typedef struct student STUDENT; //给结构体起一个别名 STUDENT 7 STUDENT stu2; //用这个别名来声明一个struct student 类型的变量
#include <stdlib.h> #include <stdio.h> #include <string.h> struct sample{ int data; struct sample *next; }; struct student{ int ID; char name; }stu1;// 直接定义一个struct student 类型的stu1 typedef struct student1{ int ID; char name; }STUDENT ;// 只是给结构体struct student1 定义一个别名 STUDENT stu2; //这里才是定义一个struct student1 的变量 //定义指向结构体变量的指针 //STUDENT *pt; //pt=&stu2; //上面的方法有问题,不能编译通过 //只能用下面的方法 STUDENT *pt=&stu2; //通过结构体指针访问结构体 //(*pt).ID = 1;不能编译通过啊! void func(STUDENT stu) { //结构体作为参数传递给函数,上面的STUDENT stu想对于以下的二条操作 //stu=stu2 //stu.ID=stu2.ID; //stu.name=stu2.name; stu.ID=0; stu.name='u'; } //上面的func并不改变stu2的值,但下面的可以 void funp(STUDENT *p) { p->ID=1; p->name='z'; } //想用指针但有不想改变原来的值用const /* void funp_const(const STUDENT *p) */ /* { */ /* p->ID=1; */ /* p->name='z'; */ /* } */ /* */ int main() { stu2.ID=1; (*pt).ID=2; pt->ID=3; //上面三个都不能在main()外写,也就是说访问结构体成员必须在main里面 func(stu2); printf("%d %c",stu2.ID,stu2.name); funp(&stu2); printf("%d %c",stu2.ID,stu2.name); return 0; }