c语言有操作内存的函数,分别为:malloc,realloc,calloc,free。
为什么要有内存函数?
从个人的感受来讲,在开发一个通讯录时,每个人的通讯录都是不一样的,这就很难确定需要给结构体数组创建多大的内存。如果不使用内存函数,那么就是简单粗暴地将结构体数组设成非常大,这很难不浪费内存。
malloc:
void* malloc (size_t size);
1.malloc函数负责向内存申请一块连续的空间,如果申请成功,则返回空间的地址,如果申请失败,则返回NULL。
2.由于不知道你想要什么类型,所以malloc返回的是void*的指针。
3.如果给malloc传的size_t参数为0,返回何值,c语言标准没有定义,取决于编译器。
calloc:
void* calloc (size_t num, size_t size);
1.calloc和malloc一样,也是申请一块连续的内存空间,申请成功,返回地址,失败,返回NULL。
2.calloc是申请num个size大小的空间。
3.calloc函数在申请成功后,将会把这块空间的每个字节都初始化为0。
realloc:
void* realloc (void* ptr,size_t size);
1.realloc用于调整动态内存大小。如果后方内存足够容下新内存大小,则realloc会在ptr后追加,使得内存变为size大小。但是如果不够,realloc会再次找一块内存,内存地址会变。
2.realloc函数如果失败,会返回NULL,如果成功则返回地址。由于不知道是否会成功,所以在使用realloc的时候,不能直接将realloc的返回值赋给ptr,要创建中间指针,如果中间指针不为NULL,则将中间指针赋给ptr。
free:
void free (void* ptr);
1.free函数用于回收动态内存。
2.c语言标准并没有定义,当传给ptr的地址不是动态内存开辟的地址时应该怎么办,这取决于编译器。
3.如果ptr为NULL,则free函数不产生行为。