本文目录一览:
c语言中如何删除结构体数组中的一个值
结构体同样可以看做一个基本数据类型。
删除结构体数组中的一个值,就像删除一个普通数组中的值一样的。
普通数组的删除是将后面的数据向前移动,达到覆盖掉的效果
比如:a[4]要删除第二个元素。那么把a[1] = a[2];a[2] = a[3];
最后一个不要动,也最好别去访问它,就相当于把第二个元素删除了。
结构体跟上面类似,但是结构体是你自定义的数据,所以在定义中,你要给它重载赋值符号(也就是=),要不然赋值的过程中会出错
C语言里如何清空结构体内的数据
memset((char*)test,0,sizeof(test));试试。我是这么做的·。 补充: 或许是for(i=o;i10;i++)memset((char*)test[i],0,sizeof(test[i]));//里面的i是你想要清空的那个变量 追问: 能详细讲解一下这两个地方吗(char*)test \sizeof(test) 回答: 函数原型:memset(void *, int, size_t);(char*)test 是第一个参数,表示test结构体的首地址test强制转化为char型的。sizeof(test)是计算test结构体的大小0表示清空。 追问: sizeof()里面的结构体可以用结构体指针代替吗? 回答: 应该不行·。sizeof()括号里是数据类型,所以貌似我上面写错。应该是memset((char*)test1[i],0,sizeof(test)); 追问: 好像我用指针也通过了,........竟然没报错,而且数据也确实清空了
C结构体数组删除操作
结构体数组删除和一般数组删除操作类似,把后面的数据往前移就行了,不过不太适用,参考一下就行了
#include stdio.h
#include string.h
void del(void *arr, int n, unsigned int size, int index) {
int i, j = index * size;
for (i = index + 1; i n; ++i) {
memcpy((void *)((char*)arr + j), (void *)((char*)arr + j + size), size);
j += size;
}
}
typedef struct foo {
int a, b;
}Foo;
int main() {
Foo f[3];
f[0].a = 0;
f[0].b = 0;
f[1].a = 1;
f[1].b = 1;
f[2].a = 2;
f[2].b = 2;
del(f, 3, sizeof(Foo), 1);
return 0;
}