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`!!! } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |