c语言可变数组的实现

来源:互联网 发布:阿里云 ecs 编辑:程序博客网 时间:2024/06/05 05:28
/*可变数组*//**创建返回指针类型**/#include<stdio.h>#include<stdlib.h>typedef int Ele;const Ele ERROR=0;typedef struct Array{Ele *data;int size;}*Arr;Arr createarr(int size){Arr arr=(Arr)malloc(sizeof(struct Array));arr->data=(Ele*)malloc(sizeof(Ele)*size);arr->size=size;return arr;}void More(Arr arr,int more){    if(arr==NULL)        return;Ele *p=(Ele*)malloc(sizeof(Ele)*(arr->size+more));for(int i=0;i<arr->size;i++){p[i]=arr->data[i];}free(arr->data);arr->data=p;arr->size=arr->size+more;}void print(Arr arr){    if(arr==NULL)        return;for(int i=0;i<arr->size;i++){printf("%d ",arr->data[i]);}}void freearr(Arr *parr){    if(parr==NULL)     return;    if(*parr==NULL)        return;free((*parr)->data);free(*parr);*parr=NULL;}Ele getarr(Arr arr ,int x){if(arr==NULL)    return ERROR;return arr->data[x];}void setarr(Arr arr,int x,Ele e){if(arr==NULL)    return;arr->data[x]=e;}int main(){Arr arr=createarr(10);print(arr);printf("\n");More(arr,20);print(arr);printf("\n");setarr(arr,5,888); print(arr);}

/*可变数组*//*返回不返回指针类型**/#include<stdio.h>#include<stdlib.h>typedef int Ele;const Ele ERROR=0;typedef struct Array{Ele *data;int size;}Arr;Arr createarr(int size){Arr arr;arr.data=(Ele*)malloc(sizeof(Ele)*size);arr.size=size;return arr;}void More(Arr *arr,int more){    if(arr==NULL)        return;Ele *p=(Ele*)malloc(sizeof(Ele)*(arr->size+more));for(int i=0;i<arr->size;i++){p[i]=arr->data[i];}free(arr->data);arr->data=p;arr->size=arr->size+more;}void print(const Arr *arr){//传指针好,只会申请一个指针类型的临时!如果传结构体本身,则申请一个结构体类型的临时变量----(传值传递形参是实参的备份)//引申:C++中引用传递形参变量和实参变量对应内存中同一块空间    if(arr==NULL)        return;for(int i=0;i<arr->size;i++){printf("%d ",arr->data[i]);}}void freearr(Arr *arr){ free(arr->data);//释放指针指向的堆空间arr->data=NULL;arr->size=0;}Ele getarr(const Arr *arr ,int x){if(arr==NULL)    return ERROR;return arr->data[x];}void setarr(Arr *arr,int x,Ele e){if(arr==NULL)    return;arr->data[x]=e;}int main(){Arr arr=createarr(10);print(&arr);printf("\n");More(&arr,20);print(&arr);printf("\n");setarr(&arr,5,888); print(&arr);}


1 0