动态内存分配_c语言学习笔记

1. 动态内存分配
    1)与 静态内存分配 相对,指在程序运行中,根据程序的实际需要来分配一块大小合适的连续的内存单元。
    2)动态分配的内存需要有一个指针变量记录内存的起始地址。
    3)常用的动态内存分配函数有 malloc(),  calloc(),  realloc() 等。

2. malloc() 函数:
    1)函数原型: void  *malloc ( unsigned int size);
    2)参数size,指申请分配的内存大小,一般写成 分配数量 x sizeof(内存单元类型)
    3)返回值是NULL(空指针)时,表示分配内存失败;否则,返回值是一个指向空类型(void)的指针,说明返回的指针所指向的内存块可能是任何类型。
int n, *p;
scanf("%d", &n);
p = (int *) malloc( n * sizeof(int) );	// 分配n个连续的整型单元,首地址赋给p
if ( p == NULL )						// 分配内存失败,给出错误信息后退出
{
	printf("分配内存失败!");
	exit(0);
}
...										//可对p所指向的单元进行其他处理


3. 函数 calloc()
    1)函数原型: void  *calloc ( unsigned int num,  unsigned int size );
    2)参数:num 表示向系统申请的内存空间的数量;size 表示申请的每个内存空间的字节数。
    3)返回值:分配内存成功,返回一个 void 类型的连续存储空间的首地址;分配失败,返回空指针NULL。

4. 函数 realloc()
    1)函数原型: void *realloc ( void *p,  unsigned int size );
    2)作用:将指针 p 所指向的存储空间的大小改为 size 个字节。用于改变原来分配的存储空间的大小。
    3)适用于先前通过动态内存分配的存储空间需要进行扩充或缩小的情况,好处是原存储空间中的数据能保持不变。

5. 释放动态内存函数 free()
    1)函数原型:void free( void  *block );
    2)参数 block 一般为指向分配的动态内存首地址的指针变量。
    3)free() 函数一般和 malloc() 等函数成对使用。



你可能感兴趣的:(学习笔记)