动态分配储存与链表
动态分配储存与链表
C语言中不允许动态数组类型,但C提供了一些内存管理函数,使用其可以动态的分配内存空间。常用的内存管理函数有以下三个:
(1)分配内存空间函数malloc、calloc;
(2)释放内存空间函数free;
1、malloc函数
原型:void *malloc(unsigned int size);
其作用是在内存的动态存储区中分配一个长度为size的连续空间(size是一个无符号函数)。
此符号的返回值是一个指向分配域起始地址的指针(类型为void)。
若此函数未能成功的执行,则返回空指针(NULL)。
2、calloc函数
原型:void *calloc(unsigned n,unsigned size);
作用:在内存的动态储存区中分配n个长度为size的连续空间。
函数返回一个指向分配域起始地址的指针;
若分配不成功,则返回NULL值。
用calloc函数可以为一维数组开辟动态储存空间,n为数组元素个数,每个元素长度为size。
3、free函数
原型:void free(void *p)
作用:释放由p指向的内存区,使这部分内存区能被其他变量使用。p是最近一次调用calloc或malloc函数时返回的值。
free函数无返回值。
链表
链表是一种常见的重要的数据结构,是动态地进行储存分配的一种结构。
头指针:存放一个地址,该地址指向第一个元素。
结点:用户需要的实际数据和链接节点的指针。
例:
- #include "StdAfx.h"
- #include<stdio.h>
- #include<string.h>
- struct student
- {
- long num;
- float score;
- struct student *next;
- };
- void main()
- {
- struct student a,b,c,*head;
- a.num=10101;
- a.score=98.5;
- b.num=10102;
- b.score=88.5;
- c.num=10103;
- c.score=78.5;
- head=&a;
- a.next=&b;
- b.next=&c;
- c.next=NULL;
- do
- {
- printf("%ld%5.1f\n",head->num,head->score);
- head=head->next;
- }
- while(head!=NULL);
- }