可变数组

头文件

#ifndef _ARRAY_H_
#define _ARRAY_H_

typedef struct{
    int *array;
    int size;
} Array;

Array array_create(int init_size);
void array_free(Array *a);
int array_size(const Array *a);
int* array_at(Array *a,int index);
void array_inflate(Array *a,int more_size);

#endif

主程序

#include"array.h"
#include
#include

//typedef struct{
//  int *array;
//  int size;
//}Array;

//Array array_create(int init_size);
//void array_free(Array *a);
//int array_size(const Array *a);
//int* array_at(Array *a,int index);
//void array_inflate(Array *a,int more_size);

Array array_create(int init_size)//返回结构类型 
{
    Array a;
    a.size=init_size;
    a.array=(int*)malloc(sizeof(int)*a.size);
    return a;
}

void array_free(Array *a)

{
    free(a->array);
    a->array=NULL;//保险起见把指针为空,size为0; 
    a->size=0;
}
int array_size(const Array *a)
{
    return a->size; 
} 
int* array_at(Array *a,int index)
{
    if(index>=a->size)//越界
    {
        //array_inflate(a,index-a->size);
        array_infloat(a,(index/BLOCK_SIZE+1)*BLOCK_SIZE-a->size);//块的概念 
     } 
    return &(a->array[index]);//返回指针 
}
//int array_get(const Array *a,int index)
//{
//  return a->array[index];
//}
//void array_set(Array *a, int index,int value)
//{
//  a->array[index]=value;
//}
void array_inflate(Array *a,int more_size)//增大数组
{
    int *p=(int*)malloc(sizeof(int)(a->size+more_size));
    int i;
    for(i=0;isize;i++)
    {
        p[i]=a->array[i];
    }
    free(a->array);
    a->array=p;
    a->size+=more_size;
    
 } 

int main( int argc,char const *argv[])
{
    Array a=array_create(100); 
    printf("%d\n",array_size(&a));
    *array_at(&a,0)=10;
    printf("%d\n",*array_at(&a,0)); 
    int numbers;
    int cnt=0;
    while(number!=-1)
    {
        scanf("%d",&number);
        if(number!=-1)
        *array_at(&a,cnt++)=numbers;
        //scanf("%d",array_at(&a,cnt++));
        
    }
    array_free(&a);
    return 0;
 } 

你可能感兴趣的:(可变数组)