1、结构体定义,struct 结构体类型名 类型1 成员列表; 类型2 成员列表; 注意:这里定义的是数据类型,定义之后的产品为数据类型,同Int double char之类的类型。 完整的类型名为:struct 结构体类型名。,结构体定义举例,#include struct student char name10;char number19;int score; main() struct student a5,b=“张三“,“21010219930323563x“,86;a2=b;printf(“%s,%s,%d,%cn“,a2.name,a2.number,a2.score,a2.numbe
2、r 5); ,定义同时定义结构体名,#include struct student char name10;char number19;int score; st1,st2; main() struct student a5,b=“张三“,“21010219930323563x“,86;a2=b;st1=b;printf(“%s,%s,%d,%cn“,a2.name,a2.number,a2.score,a2.number 5); ,定义结构体同时定义变量,定义结构体同时定义变量的情况下,可以不写结构体名。但如果不写结构体名,在定义结束后便无法在定义该类型的结构体变量了。 struct cha
3、r name10;char number19;int score; st1,st2;,用宏定义来代替结构体类型名,由于结构体类型名非常的长,所以可以用宏定义来替换成较短的名称以便使用。 #include #define ST struct student struct student char name10;char number19;int score; ; main() ST a5,b=“张三“,“21010219930323563x“,86;a2=b;printf(“%s,%s,%d,%cn“,a2.name,a2.number,a2.score,a2.number 5); ,用type
4、def给结构体起别名,#include typedef struct student char name10;char number19;int score; ST; main() ST a5,b=“张三“,“21010219930323563x“,86;a2=b;printf(“%s,%s,%d,%cn“,a2.name,a2.number,a2.score,a2.number 5); ,结构体变量的引用,结构体变量在定义的同时赋初值可以整体赋值。但在定义之后便不可以整体赋值了,需要对其成员单个赋值。引用的时候可以整体给另外一个同类型的结构体变量整体赋值,或者引用其成员进行计算或赋值。 引用
5、方法为:变量名.成员名,结构体指针,#include typedef struct student char name10;char number19;int score; ST; main() ST a5,b=“张三“,“21010219930323563x“,86,*p=a;a2=b;printf(“%s,%s,%d,%cn“,(p+2)-name,(p+2)-number,(p+2)-score,(p+2)-number 5); ,malloc,常用的内存管理函数,存在于stdlib.h和malloc.h中。主要有三个函数: malloc(size):在内存中分配一块长度为size字节的
6、连续区域。使用方法为: (类型说明符 *)malloc(size) 其值为首地址,类型为类型说明符类型的指针。Size是一个无符号整数。,calloc,在内存动态存储区中分配n块长度为size字节的连续区域。 用法: (类型说明符 *)calloc(n,size),返回值是首地址。,free,释放ptr所指向的一块内在空间。Ptr是一个任意类型的指针变量,它指向被释放区域的首地址。被释放的区域应是malloc或calloc函数所分配的区域。,真题读程序,#include #include #include main() char *p;int i; p=(char *)malloc(sizeo
7、f(char)*20); strcpy(p,“welcome“); for(i=6;i=0;i-)putchar(*(p+i); printf(“n“);free(p);,共用体,定义方法为: Union 共用体类型名 类型1 分量列表;类型2 分量列表; 共用体是所有分量共用一块内存空间。无论给哪个分量赋值,都写入整个这块内存空间;无论引用哪个分量,都从这块内存空间中读取。,链表,链表是一种特殊的结构体。其内部成员有是指向本类型指针。例如:#include typedef struct link int data;struct link *next; ST; main() ST a,b,c,
8、d,*head,*p;head= ,文件,在之前学习的知识中,输入输出都是通过键盘和屏幕显示完成的,无法长时间保存。如果想要长时间保存,需要存储于文件中。 文件分类详见教材206页。,文件类型指针,C语言无法直接操作其它文件,只能通过指向文件的指针来实现对文件的操作。 文件指针定义的格式为: FILE *指针名; 例如: FILE *fp;,文件打开函数,fopen() 使用方法: 文件指针=fopen(“文件名”,“打开方式”); 注意:文件名正常要求是完整路径,如果不是完整路径,便一定是和原程序在同一目录下。,打开方式,文件关闭函数,Fclose(文件指针名); 关闭一个文件,例如: fc
9、lose(fp);,文件读函数,fread(buffer,size,count,文件指针); 将文件指针所指向的文件中的连续的数据读出到文件外的指定位置。 Buffer:从文件中读出的数据的要存放的地址,通常是一个指针,指向某一片内存空间。 Size:一次读出的一个数据块的字节数。 Count:连续读出数据的次数。 如:freak(p,4,3,fp);,文件写函数,Fwrite(brffer,size,count,文件指针); 同文件读函数。,文件结束测试函数,Feof(文件指针); 测试文件是否结束。如果结束了返回1,否则返回0.,文件指针定位函数,Fseek(文件指针,位移量,起始点); 让文件指针在文件内移动。,文件输入输出,fscanf(文件指针,格式控制串,输入项地址表); fprintf(文件指针,格式控制串,输出项列表); 用法同scanf和printf,不同的是接收是从文件指针所指的文件中读数据而非屏幕,输出是写到文件指针所指的文件中去而非屏幕。,