结构体如下:
typedef struct event
{
short head[3];
short ADC1H;
short ADC1[16];
}eve,里面都是short型的数组或者数值,现在想把一个数组,如short a[80],按照顺序直接赋值给结构体eve,把80个数据用循环方法赋值4次,请问怎么实现?下面的方法好像不行
int j=0;
for(int i=0;i<4;++i)
{ memcpy(eve,a[j],20);
j+=20;
.....
}
请问这样分组复制就不存在对齐的问题了吗?因为这样也有数组复制到数组的问题。还有就是那个结构体会经常变动,所以想一次性的复制进去,而不想这样子分部分的复制。这样子就不用每次改很多代码了
追答结构体内部数组的内存肯定是连续的
但是结构体内部各个元素之间不一定是连续的
如果想一次性复制进去,同时不想改动对齐方式的话,可以先计算出各个元素之间的相对位置
然后对a进行处理 添加一些空白元素进去,最后对eve赋值
比如你这个结构体
如果按默认对齐方式 在32位机上(4字节对齐)
typedef struct event
{
short head[3];
short ADC1H;
short ADC1[16];
}eve
head和ADC1H之间会有2字节空白,ADC1H和ADC1之间也有2字节空白
这个你可以把地址打印出来验证一下(PS:sizeof eve应该是44)
如果是这样的话,可以在数组a中,以20元素为一组,扩充到22元素,分别在a[3]加一个空白元素,a[5]处加一个空白元素
这样直接memcpy应该就可以了