本文目錄一覽:
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;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/184858.html