动态分配储存与链表
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); }