牛骨文教育服务平台(让学习变的简单)
博文笔记

c语言可变数组的实现

创建时间:2017-04-04 投稿人: 浏览次数:237
/*可变数组*/
/**创建返回指针类型**/
#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);
}


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。