/*可变数组*/
/**创建返回指针类型**/
#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);
}