1. 首页 > 科技

要怎么删除结构体数组? 删除结构体数组元素

要怎么删除结构体数组?删除结构体数组元素

在C语言中,怎么删除一个结构体数组中的数据?

满意答案null6级2010-12-10你是想单纯的删除 ,还是注销这个结构体的这一项啊 追问: 把结构体中存的所有数据删除 回答: 要是是int型的我们一般把它等于0要是是指针型的一般是把他指向空指针NULLstruct A{int a;char *b;}dd;main(){dd.a=0; dd.b==NULL;}可是这么做好像没事意思,你能告诉我你是想干嘛吗 追问: 学生信息管理系统中有一个结构体数组,存有学生姓名char(20),学号int,等信息,要实现该程序的全部删除功能 回答: 那可以像上面我教的的那样,其实就是用0和NULL把原来的值给覆盖了,原来的数据自然就没有了,也就是实现了你的删除的目的!

结构体数组删除

对于数组删除,一般就是使用后面数组元素前移的操作,来覆盖前一元素,达到删除的效果。。。。

例如数组a[10],要删除a[5]这个元素,那么只需要把后面的元素前移一位就行了,也就是a[5]=a[6],a[6]=a[7],a[7]=a[8],这样子a[5]这个元素的内容就会被全部抹杀掉了。。。。

不过这里存在一个问题,你一个结构体数组前移的时候,如何判断有多少个元素要前移呢。。。。

所以我的做法是在结构体里面定义一个标示符int flag。。。。

当对这个结构体数组元素赋值时,如a[10].name="KING" 时,那么就是说下标值为10的元素是存在的,赋完值后,来个a[10].flag=1 来标记一下。。。。

这样做的话,我们可以进行这样的删除操作了,如删除下标值为5的元素——

int i=5;

for(int j=i+1;a[j].flag==1;i++,j++)

{

a[i]=a[j];

/* 结构体数组可以直接这样子做,它会自动把a[i]里面的变量等于a[j]里面对应的变量 */

}

a[i].flag=0;

/* 如果你里面原来有10个元素,那么删除了其中一个,那就剩下9个,a[9]那个位置应该为空,一一把里面的元素清空太麻烦,直接把它的标示符flag等于0,就表示该位置为空的 */

如何清空结构体数组?

memset(&st[i],0x00,sizeof(struct st_r));

bzero(&st[i],sizeof(struct st_r));

然后循环

测试函数:

#include <stdio.h>

#include <string.h>

#define bzero(a, b) memset(a, 0, b)

struct st_r

{

int a;

};

int main()

{

struct st_r st[20];

memset(&st[0],0x00,sizeof(struct st_r));

printf("a:%d\n",st[0].a);

memset(&st[0],0x01,sizeof(struct st_r));

printf("a:%d\n",st[0].a);

bzero(&st[0],sizeof(struct st_r));

printf("a:%d\n",st[0].a);

getchar();

return 0;

}

输出:

a:0

a:16843009

a:0

由于int 是4字节 memset是按字节赋值,即a=0x01010101=16843009

另:bzero在linux里的string.h,win下用的话需要自己定义(测试函数中有)

你提到的NULL定义是define NULL 0 效果是一样的,但NULL一般用于指针

C++如何删除一个结构体数组

1、结构体同样可以看做一个基本数据类型。删除结构体数组,就像删除一个普通数组一样的。

2、例如:

node *p = new node[100]; //声明一个结构体数组

delete[] p; //删除该结构体数组