创建一个长度为n的动态数组,读入数据后将其长度增长一倍,继续读入新数据。输出长度增长前后所有的元素。
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int *array;
int length;
}DArray;
DArray creat(int n);
void print(DArray *p);
void grow(DArray *a,int n);
void release(DArray *a);
int main()
{
DArray a;
int n;
scanf("%d",&n);
a=creat(n);
print(&a);
grow(&a,n*2);
print(&a);
release(&a);
return 0;
}
DArray creat(int n){
DArray b;
int i;
b.array=(int *)malloc(sizeof(int)*n);
if(b.array==NULL){
printf("Allocation Error");
exit(0);
}else{
b.length=n;
for(i=0;i<b.length;i++){
scanf("%d",&b.array[i]);
}
}
return b;
}
void print(DArray *p){
int i;
for(i=0;i<p->length;i++){
printf("%d\n",p->array[i]);
}
}
void grow(DArray *a,int n){
int *p;
int i;
p=(int *)malloc(sizeof(int)*n);//此处的a存放main函数中a的地址
if(p==NULL){
return;//强行终止函数继续运行,程序结束不继续往下执行
}
else{
for(i=0;i<a->length;i++){
p[i]=a->array[i];
}
for(i=a->length;i<n;i++){
scanf("%d",&p[i]);
}
free(a->array);
a->array=p;
a->length=n;
}
}
void release(DArray *a){
free(a->array);
}