📅  最后修改于: 2023-12-03 15:32:48.402000             🧑  作者: Mango
在C语言中,malloc()和calloc()是申请内存的常用函数。它们有一些区别,下面将对它们进行详细介绍。
参数不同
malloc()函数只接受一个参数,表示要申请的内存字节数;而calloc()函数需要两个参数,第一个参数表示要申请的内存块数量,第二个参数表示每个内存块的大小。
内存内容不同
malloc()函数申请的内存中的内容是随机的,可能包含旧数据,需要在申请后进行初始化;而calloc()函数申请的内存中的内容全部被初始化为0。
速度不同
由于calloc()在申请内存时需要对内存进行初始化,所以相对于malloc()来说,它的速度可能会更慢一些。
返回值不同
malloc()函数返回申请内存的指针,而calloc()返回申请内存的首地址。
下面是使用malloc()和calloc()函数申请内存的示例代码。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n = 5;
int *p1, *p2;
p1 = (int*) malloc(n * sizeof(int)); // 申请长度为n的int型数组的空间
p2 = (int*) calloc(n, sizeof(int)); // 申请长度为n的int型数组的空间
if (p1 == NULL || p2 == NULL) // 判断是否申请成功
{
printf("Error: failed to allocate memory.\n");
return -1;
}
for (int i = 0; i < n; i++)
{
*(p1 + i) = i + 1; // 给p1动态分配的数组中的数赋值
*(p2 + i) = i + 1; // 给p2动态分配的数组中的数赋值
}
printf("p1: ");
for (int i = 0; i < n; i++)
{
printf("%d ", *(p1 + i));
}
printf("\n");
printf("p2: ");
for (int i = 0; i < n; i++)
{
printf("%d ", *(p2 + i));
}
free(p1); // 释放p1动态分配的数组的内存
free(p2); // 释放p2动态分配的数组的内存
return 0;
}
在上面的示例代码中,首先使用malloc()和calloc()函数分别申请了长度为5的int型数组的空间。然后在循环中给它们赋值,最后输出它们的值。最后使用free()函数释放申请的内存。需要注意的是,使用malloc()和calloc()函数申请的内存空间一定要记得在使用完后及时释放,否则会造成内存泄漏。