动态分配储存与链表

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);
}

 

posted @ 2019-02-17 22:37  巫师笔记  阅读(907)  评论(0编辑  收藏  举报