/*
* 请编写一个函数,从标准输入读取一列整数,把这些值存储于一个动态分配的数组中
* 并返回这个数组。函数通过观察 EOF 来判断输入列表是否结束。数组的第一个数是
* 数组包含的值的个数,它的后面就是这些整数值。
*/
/*
* 这个函数分配一个数组,并在需要时根据一个固定的增值对数组进行重新分配。
* 增量DELTA可以进行微调,用于在效率和内存浪费之间做一平衡。
*/
#include <stdio.h> #include <malloc.h>
#define DELTA 100
int *readints(void) { int *array; int size; int count; int value;
/* 获得最初的数组,大小足以容纳DELTA个值 */ size = DELTA; array = malloc( ( size+1 ) * sizeof( int ) ); //传入的是字节数
if( array == NULL ) return NULL; //空指针
/*----------------------------------------------------------------------*/ //从标准输入获得值
count = 0; while( scanf( "%d", &value ) == 1 ) { /* 如果需要,使数组变大,然后存储这个值 */ count += 1; if( count > size ) { size += DELTA; array = realloc( array, ( size+1 ) * sizeof( int ) ); //扩大分配内存
if( array == NULL ) return NULL; } }
array[count] = value; /*-----------------------------------------------------------------------*/ /* * 改变数组的长度,使其刚刚正好,然后存储计算值并返回这个数组。 * 这样做绝不会使数组更大,所以它绝不应该失败(但还是应该进行检查!)。 */ if( count < size ) { array = realloc( array, ( count+1 ) * sizeof(int) ); if(array == NULL) return NULL; } array[0] = count; return array; }
|
阅读(1155) | 评论(0) | 转发(0) |