怎么定位结构体某个变量的地址?

struct AA{
    unsigned char day;
    unsigned char month;
    unsigned char year;
}a;

unsigned char b[]={1,2,3,4};
我想把b[2]开始两位复制到month开始两位,使用memcpy(&a+1,b+1,2);结果是错误的。我怀疑是&a+1的偏移量为一个结构体大小3,而非1.

那么要怎么定位month的地址呢?

阅读 2.5k
2 个回答
我想把b[2]开始两位复制到month开始两位,使用memcpy(&a+1,b+1,2);结果是错误的。

两位?两个 bit ?memcpy 是没有办法复制位的。所以这个操作的目的是啥?

我怀疑是&a+1的偏移量为一个结构体大小3,而非1.

不要怀疑了,这应该是 C 语言的常识,讲到指针的时候必然会介绍。

指针p 做加减的时候,单位是 sizeof(*p)p+1 会便宜 sizeof(*p)

那么要怎么定位month的地址呢?

&a.month

&a类型是AA*&a+1会向后移动一个结构体的大小,很可能会覆盖其他的内存!!!
如果一定要这样赋值的话,将&a转为char*类型就行了,memcpy((char*)(&a) + 1, b + 1, 2)

强烈建议不要这样做!!!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题