美文网首页
2018-01-06 C++ 指针的强制转换

2018-01-06 C++ 指针的强制转换

作者: 罗兆峰 | 来源:发表于2018-01-18 09:42 被阅读0次

指针强制转换仅仅是将地址后的内容按照不同的类型进行变量解释和读取。(但是如果强制转换的指针所指向数据的字节数不一样,会存在数据错误。比如:一个指向char型数据的指针p,p指向的内容只有一个字节,*p是将地址后面的一个字节的内容按照char进行解读取;但是如果将其强制转换成int型指针*pn,*pn将地址后面的四个字节的内容按照int进行解读取,这样就会多读了后面的内存,出现错误。

结构体的大小计算和内存对齐

结构体的成员占用不同的存储空间,当计算结构体占用内存空间时,并不是简单的相加。

偏移量: 结构体变量成员地址和结构体变量地址的差

结构体大小等于最后一个成员的偏移量 加上最后一个成员的大小

实际上,偏移量会被调整,调整规则如下:

1. 偏移量必须是当前成员大小的整数倍

2.结构体大小是所有成员大小的整数倍(各项)

例子 struct a {

int  i,        // 偏移量为 0

char c;          // c 的偏移量为4 

int  j};            //j 的偏移量为 5 需要调整到 8 才成为 size(j)的整数倍

size(a) = 4 +1 + 4+3 = 12  满足规则2

例子:

struct st_task{

uint16_t id;

unint32_t value;

uint64_t timestamp;

};

uint64_t a = 0x 00 00 00 00 00  01 00 01;

memcpy(&task,&a,size0f(uint64_t)

a 在内存的存储有两种形态:

1. 大端模式, 低地址高字节

00 00 00 00 00 01 00 01  从左到右低地址到高地址

2.小段模式 低地址低字节

10 00 10 00 00 00 00 00 

st_task 的大小分析

struct st_task{

uint16_t id;   // 0

unint32_t value; // 2  但是成员大小为4 , 因此要补充成4偏移量。

uint64_t timestamp; // 4 + size(uint32_t) =8  偏移量, 不用修改。

};

8+ 8 = 16 满足规则2

在小端模式下, id 被赋值为 1000 value 被赋值为 00 00 00 00 ( 10 00  被跳过了),( 16 - )timestamp 没被赋值默认为 0 , 使用小端模式存储的字节转换为实际值后,id 变为 0x0001

相关文章

  • 2018-01-06 C++ 指针的强制转换

    指针强制转换仅仅是将地址后的内容按照不同的类型进行变量解释和读取。(但是如果强制转换的指针所指向数据的字节数不一样...

  • C与C++的一点区别

    当void*指针赋值给另一个类型的指针时,C++规定必须进行强制类型转换,但在C语言中却无必要 在C++中一个内层...

  • C++指针和引用

    一、指针与强制类型转换 指针类型的强制转换,是指将指针所指的内容的类型由原先的类型转换为后面的类型 p和p1的值都...

  • C++指针类型间强制转换

    指针变量及不同指针类型的含义 指针变量指针变量,本质上是一个变量,只是它是存放地址的变量,指针的类型代表的是它所指...

  • C++类型转换

    一、C风格的强制类型转换 eg: 二、C++风格的强制类型转换 const_cast ,static_cast ,...

  • 十种常见的异常

    NullPointException空指针异常 ClassCastException类型强制转换异常 Illega...

  • 内存管理

    类型转换 1.隐式转换 2.显示转换/强制类型转换浮点型强制转换成int 直接把小数点去掉,保留整数部分 强转指针...

  • 异常

    1.常见的RuntimeException: 空指针异常类:NullPointerException 类型强制转换...

  • C++类型转换

    C++类型转换 C++为了规范C中的类型转换,加强类型转换的可视性,引入了四种强制类型转换操作符:static_c...

  • C++中的类型转换

    C++中的类型转换 显示转换 命名的强制类型转换 static_cast dynamic_cast const_c...

网友评论

      本文标题:2018-01-06 C++ 指针的强制转换

      本文链接:https://www.haomeiwen.com/subject/xieynxtx.html