malloc()

C Primer Plus 第12章 12.6 分配内存:malloc()和free()

这一生的挚爱 提交于 2019-12-03 21:40:06
首先,回顾一些有关内存分配的事实。所有的程序都必须留出足够内存来存储它们使用的数据。一些内存分配是自动完成的。例如,可以这样声明: float x; char place[]="Dancing oxen creek"; 于是,系统将留出存储float或字符串的足够内存空间,您也可以更明确地请求确切数量的内存: int plates[100]; 这个声明留出100个内存位置,每个位置可存储一个int值。在所有这些情形中,声明同时给出了内存的标识符,因此您可以使用x或place来标识数据。 C的功能还不止这些。 可以在程序运行时分配 更多的内存。主要工具是函数malloc(),它接受一个参数:所需内存字节数。 然后,malloc()找到可用内存中一个大小合适的块。内存是匿名的,也就是malloc()分配了内存,但没有为它指定名字。然而, 它却可以返回那块内存第一个字节的地址 。因此,您可以把那个地址赋给一个指针变量,并使用该指针来访问那块内存。因为char代表一个字节,所以传统上曾将malloc()定义为指向char的指针类型。 然而,ANSI C 标准使用了一个新类型:指向void的指针。 这一类型被用作“通用指针”。函数malloc()可用来返回数组指针、结构指针等等,因此 一般需要把返回值的类型指派为适当的类型。 在ANSI C 中,为了程序清晰应对指针进行类型指派,但