数组动态扩展

来源:百度知道 编辑:UC知道 时间:2024/05/25 17:23:48
开始用指针new了10个结构体,结构体很简单,int x,int y,随着不停地插入结构体,10个不够,就想扩展大小。因为我是在函数里进行的,而指针是参数,在主函数里还要用的,所以不能另外new数组。怎样在原来的数组后面扩展?
struct fnum
{
int x;
int y;
};
PutIn(int n,fnum *pt,int nfnum,int sum,fnum temp)//n是插入的下标,pt是数组指针,nfnum是现有数组上限,sum是目前在数组中放了几个,temp是要插入的结构体
{
if (sum>=nfnum)
{
nfnum=nfnum*2;
fnum *pt1=new fnum[nfnum];
for (int i=0;i<n;i++)
{
pt1[i].x=pt[i].x;
pt1[i].y=pt[i].y;
}
pt1[n].x=temp.x;
pt1[n].y=temp.y;

for (int i=n;i<sum;i++)
{
pt1[i+1]=pt[i];
}
delete pt;
return pt1;
}
else
{

for (int i=sum;i>n;i--)
{
pt[i+1].x=pt[i].x;
pt[i+1].y=pt[i].y;
}
pt[n].x=temp.x;
pt[n].y=temp.y;
return pt;

}

}
效果和这个差不多的

理论上这是不可能的,不管是动态还是静态,内存分配的位置都是随机的,你无法保证新分配的空间和原来的能连在一起。你可以把你的结构体改成链表,这样就可以一直往后加。如果你不这么做那就没办法了。你是怎么用指针的?把那部分代码发上来,也许可以用new,只是你没有意识到。

把这个方法修改一下就可以了。

struct fnum *fs=new struct fnum[10]; //原本数组定义
struct fnum **a;
a=&fs; //一个指向数组指针的指针

这是修改过的函数
PutIn(int n,fnum **a,int nfnum,int sum,fnum temp){
fnum *pt;
pt=*a;
if (sum>=nfnum){
nfnum=nfnum*2;
fnum *pt1=new fnum[nfnum];
for (int i=0;i<n;i++){
pt1[i].x=pt[i].x;
pt1[i].y=pt[i].y;
}
pt1[n].x=temp.x;
pt1[n].y=temp.y;
for (int i=n;i<sum;i++){
pt1[i+1]=pt[i];
}
delete pt;
return pt1;
}
else {
for (int i=sum;i>n;i--){
pt[i+1].x=pt[i].x;
pt[i+1].y=pt[i].y;
}
pt[n].x=temp.x;
pt[n].y=temp.y;
return pt;
}
}

试了下realloc函数
int *s=(int *)malloc(10);
in