使用C语言的calloc方法分配内存并初始化数组

作者:日照淘贝游戏开发公司 阅读:104 次 发布时间:2023-05-15 15:41:17

摘要:  C语言中有两个常用的动态内存分配函数:malloc()和calloc()。前者可用于分配指定大小的内存,而后者可以在内存分配的同时将其初始化。  calloc()函数的定义如下:  void *calloc(size_t num, size_t size);  该函数接受两个参数:第一个参数是要分配的元素数...

  C语言中有两个常用的动态内存分配函数:malloc()和calloc()。前者可用于分配指定大小的内存,而后者可以在内存分配的同时将其初始化。

使用C语言的calloc方法分配内存并初始化数组

  calloc()函数的定义如下:

  void *calloc(size_t num, size_t size);

  该函数接受两个参数:第一个参数是要分配的元素数量,second参数是每个元素的大小,单位为字节。Calloc()会分配一个块大小为num x size的内存块,并将它的所有比特位设置为0。

  在这篇文章里,我们将了解如何使用C语言中的calloc()函数来分配内存并初始化数组。

  分配内存

  在我们深入讨论之前,让我们先来看一个简单的程序,该程序使用calloc()函数动态分配包含5个整数的数组:

  #include

  #include

  int main()

  {

   int *p = NULL;

   int i, n = 5;

   // Using calloc for dynamic memory allocation

   p = (int*) calloc(n, sizeof(int));

   if (p == NULL)

   {

   printf("Memory allocation failed!");

   exit(0);

   }

   // Initializing the array

   for (i = 0; i < n; i++)

   {

   p[i] = i + 1;

   }

   // Printing the array

   printf("The array elements are: ");

   for (i = 0; i < n; i++)

   {

   printf("%d ", p[i]);

   }

   // Freeing the allocated memory

   free(p);

   return 0;

  }

  这个程序使用了malloc()函数分配了5个整数所需的内存,并且初始化了数组中的值。在这个例子中,我们首先声明一个指向整型的空指针p,并将其初始化为NULL。接下来,我们使用calloc()分配大小为5个整数的内存,并使用sizeof(int)算出每个整数的大小。在函数返回非NULL指针之后,我们使用for循环初始化数组。最后,我们用free()函数释放了之前分配的内存。

  初始化数组

  在C语言中,可以使用一个循环来初始化为零的数组。但是,在使用calloc()时,数组的所有元素已经被初始化为0了。因此,不需要为数组分配内存后使用循环来初始化每个元素。

  下面是一个示例程序,演示了如何使用calloc()函数来分配并初始化一个字符串数组:

  #include

  #include

  #include

  int main()

  {

   char **str = NULL;

   int i;

   // Using calloc for dynamic memory allocation

   str = (char**)calloc(3, sizeof(char*));

   if (str == NULL)

   {

   printf("Memory allocation failed!");

   exit(0);

   }

   for (i = 0; i < 3; i++)

   {

   str[i] = (char*)calloc(15, sizeof(char));

   if (str[i] == NULL)

   {

   printf("Memory allocation failed!");

   exit(0);

   }

   }

   strcpy(str[0], "Marshmallow");

   strcpy(str[1], "Nougat");

   strcpy(str[2], "Oreo");

   // Printing the array elements

   for (i = 0; i < 3; i++)

   {

   printf("%s ", str[i]);

   }

   // Freeing the allocated memory

   for (i = 0; i < 3; i++)

   {

   free(str[i]);

   }

   free(str);

   return 0;

  }

  在这个程序中,我们使用了一个字符串数组,该数组的大小为3。我们使用calloc()函数来动态分配内存,在这种情况下,我们需要动态分配一个指向指针之间的数组,因为每个字符串都是指针。我们首先使用calloc()分配3个元素空间,即3个字符串的空间。之后,我们要注意每个字符串的大小,因为我们将在这些空间中存储字符串。如果我们忘记了这一点,函数将返回一个非NULL的空指针,但该指针可能无法用于正确地存储字符串。

  然后,我们使用strcpy()函数将字符串值从常量传递给新分配的内存,并打印所有元素。请注意,我们在使用循环初始化动态数组时不需要循环,因为calloc()将动态数组初始化为零。

  最后,我们使用free()函数释放已分配的内存。请注意,我们使用了嵌套的循环来释放指向指针之间的数组。

  结论

  calloc()是一个在C语言中常用的内存分配函数,它可以分配并初始化内存块。正常情况下,可以使用malloc()和循环来初始化动态数组。但是在某些情况下,calloc()可以使代码更加简洁和易于维护。鉴于C语言的数组在默认情况下未初始化,使用calloc()函数提供了一种简单和有效的方法来为数组分配内存并初始化其所有元素。

  • 原标题:使用C语言的calloc方法分配内存并初始化数组

  • 本文链接:https://qipaikaifa1.com/tb/1353.html

  • 本文由日照淘贝游戏开发公司小编,整理排版发布,转载请注明出处。部分文章图片来源于网络,如有侵权,请与淘贝科技联系删除。
  • 微信二维码

    CTAPP999

    长按复制微信号,添加好友

    微信联系

    在线咨询

    点击这里给我发消息QQ客服专员


    点击这里给我发消息电话客服专员


    在线咨询

    免费通话


    24h咨询☎️:189-2934-0276


    🔺🔺 棋牌游戏开发24H咨询电话 🔺🔺

    免费通话
    返回顶部