原型:extern void *malloc(unsigned int num_bytes);
头文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 与 malloc.h 的内容是完全一致的。)
功能:分配长度为num_bytes字节的内存块
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
注意一下两个例子:
例一:
include <stdio.h>
#include <stdlib.h>
int i = 8;//
char *p = malloc( i );//
int
main()
{
p[0] = 'A';
p[ i - 1 ] = 'Z';
p = realloc( p, i*2 );
p[i*2] = '&';
printf("%c, %c, %c/n", p[0], p[i-1], p[i*2] );
return 1;
}
编译报错:t.c:5: error: initializer element is not constant
例二:
include <stdio.h>
#include <stdlib.h>
int
main()
{
int i = 8; //
char *p = malloc( i );//
p[0] = 'A';
p[ i - 1 ] = 'Z';
p = realloc( p, i*2 );
p[i*2] = '&';
printf("%c, %c, %c/n", p[0], p[i-1], p[i*2] );
return 1;
}
编译成功,且运行结果正确。
分析原因:
initializer element is not constant
中文解释是,成员的初始化不是常量.
c语言里的全局变量是在编译器的链接阶段完成的,
char *p = malloc( i );
使得 p 需要调用函数malloc函数,这当然不行了,因为编译器在链接时并不能执行函数啊!!