c语言可变数组的实现
/*可变数组*/ /**创建返回指针类型**/ #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(" "); More(arr,20); print(arr); printf(" "); 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(" "); More(&arr,20); print(&arr); printf(" "); setarr(&arr,5,888); print(&arr); }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: javascript中数组的定义
- 下一篇: C语言中将数组内的元素进行运算