预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共39页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第十一章指针与结构体11.1指针指向结构体说明:11.1.2指针指向结构体数组11.2结构体指针作函数参数#include<stdio.h> structstudent {charname[15]; intnum; intscore[3]; floatave; }; voidaverage(structstudent*q); voidmain() {structstudent*p,s[5]; inti; p=s; printf("inputname,num,score0,score1,score2:\n"); for(i=0;i<5;i++,p++) scanf("%s%d%d%d%d",p->name,&p->num,&p->score[0],&p->score[1],&p->score[2]); p=s; average(p); }[例11-3]编写一个有计时器功能的程序,在屏幕上显示时:分:秒。11.3链表C语言的库函数中包含了一组可以在程序执行期间临时分配和回收单元的库函数,在以后的操作中会经常用到,这些函数的原形在头文件stdlib.h或malloc.h中。动态存储分配函数malloc()malloc()示例2.calloc函数 函数原型:void*calloc(unsignedintnum,unsignedintsize) 功能:在内存中开辟多个指定大小的存储空间,并将该空间的首地址返回。如果内存空间不够大,申请不到所需的字节数,则函数的返回值为空(NULL)。 说明: (1)形参num和size均为无符号整型量,表示分配num个size大小的存储空间,且这些内存空间是连续的。例如calloc(5,8)表示申请5个大小为8字节的存储空间,即40个字节的内存空间。 (2)函数的返回值为void型,同malloc()函数一样,如果想把这个返回值赋给其它类型的指针变量,则要强制类型转换。 (3)calloc()函数申请的内存空间会清0。 通常上述两个函数的典型使用为:通过sizeof()计算某类型数据所占的字节数,然后申请若干倍的空间,并将首地址赋给指针。例如: double*ptr=(double*)malloc(sizeof(double)*10); 或 double*ptr=(double*)calloc(10,sizeof(double)); 申请了一个可以存放10个双精度数的存储空间,并将首地址送给ptr,以后ptr可以当做一个有10个元素的双精度数组使用。例如: for(i=0;i<10;i++) ptr[i]=i;/*相当于*(ptr+i)=i*/3.realloc()函数 函数原型:void*realloc(void*ptr,unsignedintsize); 功能:改变已分配的存储空间的大小。 说明: (1)将ptr指向的存储空间的大小改为size字节,ptr必须是用malloc()或calloc()函数分配的,size与原来的存储空间比可大可小。 该函数返回新分配的存储空间的首地址。 4.free()函数 函数原型:voidfree(void*ptr); 功能:将ptr指向的存储空间释放,交由系统再分配。 说明: ptr必须是由申请函数所返回的地址。 free函数无返回值。 例如:free(ptr);动态存储释放函数free动态输入多个字符串-示例#include<stdio.h> #include<stdlib.h> #include<string.h> intmain(void) {inti,n=0; char*color[20],str[10]; printf("请输入颜色名称,每行一个,#结束输入:\n"); scanf("%s",str); while(str[0]!='#'){ color[n]=(char*)malloc(sizeof(char)*(strlen(str)+1)); strcpy(color[n],str); n++; scanf("%s",str); } printf("你输入的颜色是:"); for(i=0;i<n;i++) printf("%s",color[i]); return0; }例11-5修改-动态分配内存11.3.2学生信息管理的链表实现一、程序解析例11-6数据定义与函数声明二、链表的概念链表的概念-结点定义链表是一种常见的重要的数据结构,它是动态存储分配的一种。最简单的链表叫单链表,其构造如图所示。链表的概念-与数组比较用链表存储和用数组存储的主要区别是: (1)数组的元素个数是固定的,而组成链表的结点个数可按需要增加或减少; (2)数组元素的存储单元在数组定义时分配,属于静态分配,链表结点的存储单元在程序执行时根据需要随时申请,属于动态分配;