赞
踩
数组定义时,必须先说明其所占存储空间的⼤⼩,这样对空间⼤⼩不易确定的问题就很难定义数组。
如想⽤数组表⽰所有⼈的考试成绩,⼈数只能在执⾏时才确定下来,编程时⽆法确定⼈数,虽然可以先估计⼀个很⼤的空间,但这对使⽤空间差别很⼤的情况不太适⽤。
怎样定义⼀个动态数组,才能使它可以在执⾏时确定数组的⼤⼩呢?
严格来讲,C语⾔中没有动态数组,但可以⽤动态内存分配函数来模拟动态数组的功能。如先输⼊⼈数,再根据输⼊的⼈数动态分配⼀段正合适的空间。
calloc( )函数可以完成此功能,格式如下:
(void*)caloc(分配单元个数,每个单元⼤⼩)
如果⽤⼀个整数表示⼀个⼈的考试成绩,⼀共有n个⼈,可以写成:
- int *p;
- p = (int *)calloc(n.sizeof(int));
使⽤ calloc( ) 函数后要⽤ free( )释放内存。
void free(void*)
使⽤这两个函数要包含头⽂件 stdlib.h。 完整示例如下:
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
- int n, i;
- int *p;
- printf("输入人数: ");
- scanf("%d", &n);
- p = (int *)calloc(n, sizeof(int));
- if (p == NULL)
- {
- printf("内存分配错误");
- exit(0);
- }
-
- for (i = 0; i < n; i++)
- {
- printf("输入第%d个数: ", i + 1);
- if (scanf("%d", p + i) != 1)
- {
- printf("输入格式错误,请确保输入的是整数。\n");
- free(p);
- exit(0);
- }
- }
- printf("\n输入的成绩为:\n");
- for (i = 0; i < n; i++)
- {
- printf("第%d个⼈的成绩为%d\n", i + 1, *(p + i));
- }
- free(p);
- return 0;
- }
程序运⾏结果如下
- 输入人数: 5
- 输入第1个数: 90
- 输入第2个数: 80
- 输入第3个数: 90
- 输入第4个数: 90
- 输入第5个数: 90
-
- 输入的成绩为:
- 第1个⼈的成绩为90
- 第2个⼈的成绩为80
- 第3个⼈的成绩为90
- 第4个⼈的成绩为90
- 第5个⼈的成绩为90
C语⾔中,可以⽤ calloc( )模拟实现动态数组的功能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。