当前位置:   article > 正文

C语⾔中有动态数组吗?

C语⾔中有动态数组吗?

一、问题

        数组定义时,必须先说明其所占存储空间的⼤⼩,这样对空间⼤⼩不易确定的问题就很难定义数组。

        如想⽤数组表⽰所有⼈的考试成绩,⼈数只能在执⾏时才确定下来,编程时⽆法确定⼈数,虽然可以先估计⼀个很⼤的空间,但这对使⽤空间差别很⼤的情况不太适⽤。

        怎样定义⼀个动态数组,才能使它可以在执⾏时确定数组的⼤⼩呢?

二、解答

        严格来讲,C语⾔中没有动态数组,但可以⽤动态内存分配函数来模拟动态数组的功能。如先输⼊⼈数,再根据输⼊的⼈数动态分配⼀段正合适的空间。

         calloc( )函数可以完成此功能,格式如下:

(void*)caloc(分配单元个数,每个单元⼤⼩)

        如果⽤⼀个整数表示⼀个⼈的考试成绩,⼀共有n个⼈,可以写成:

  1. int *p;
  2. p = (int *)calloc(n.sizeof(int));

        使⽤ calloc( ) 函数后要⽤ free( )释放内存。

void free(void*)

        使⽤这两个函数要包含头⽂件 stdlib.h。 完整示例如下:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int n, i;
  6. int *p;
  7. printf("输入人数: ");
  8. scanf("%d", &n);
  9. p = (int *)calloc(n, sizeof(int));
  10. if (p == NULL)
  11. {
  12. printf("内存分配错误");
  13. exit(0);
  14. }
  15. for (i = 0; i < n; i++)
  16. {
  17. printf("输入第%d个数: ", i + 1);
  18. if (scanf("%d", p + i) != 1)
  19. {
  20. printf("输入格式错误,请确保输入的是整数。\n");
  21. free(p);
  22. exit(0);
  23. }
  24. }
  25. printf("\n输入的成绩为:\n");
  26. for (i = 0; i < n; i++)
  27. {
  28. printf("第%d个⼈的成绩为%d\n", i + 1, *(p + i));
  29. }
  30. free(p);
  31. return 0;
  32. }

        程序运⾏结果如下

  1. 输入人数: 5
  2. 输入第1个数: 90
  3. 输入第2个数: 80
  4. 输入第3个数: 90
  5. 输入第4个数: 90
  6. 输入第5个数: 90
  7. 输入的成绩为:
  8. 1个⼈的成绩为90
  9. 2个⼈的成绩为80
  10. 3个⼈的成绩为90
  11. 4个⼈的成绩为90
  12. 5个⼈的成绩为90

三、总结

        C语⾔中,可以⽤ calloc( )模拟实现动态数组的功能。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/302612
推荐阅读
相关标签
  

闽ICP备14008679号