加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C/C++指针,ptr 1 = ptr 1字节或ptr 1 * sizeof(pointer_type)?

发布时间:2020-12-16 10:52:37 所属栏目:百科 来源:网络整理
导读:有 any_type *ptr = (any_type*)malloc(sizeof(any_type)*size);my_ptr = ptr+1;memcpy(dst,my_ptr,sizeof(any_type)); 将my_ptr指向ptr之后的1个字节,还是指向ptr后的sizeof(any_type)字节? 对齐选项如何影响答案?签名/未签名类型是不同的? 解决方法 指

any_type *ptr = (any_type*)malloc(sizeof(any_type)*size);
my_ptr = ptr+1;
memcpy(dst,my_ptr,sizeof(any_type));

将my_ptr指向ptr之后的1个字节,还是指向ptr后的sizeof(any_type)字节?
对齐选项如何影响答案?签名/未签名类型是不同的?

解决方法

指针运算是根据指针的静态类型[*]的大小执行的,因此它将有效地添加sizeof * ptr.成员的对齐将考虑对象的大小,作为类型的对齐(对象末尾的填充).

struct test {
   int a;
   char b;
};

如果类型是4字节对齐的话,测试的大小将不是5(假设32位整数).

[*]请注意,在C中,您可以将派生对象的地址分配给基类,但指针算术将对指针的类型进行操作,而不是实际对象:

struct base { int x; };
struct derived : base { int y; };
int main() {
   base * p = new derived[10];
   base * q = p+1;             // this does not point to the second `derived`!!!
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读