因为今天看的代码中用到了结构体的强制类型转换,就很想了解一下结构体的强制类型转换是怎样的。
一个结构体如下:
在下面这段代码中rbuf->reqCmdBuf是一个空指针,首先将这个空指针赋值给一个uint8_t类型的指针buf。
然后将buf指针强制类型转换为rdma_write_msg_head结构体类型指针。
那再这里是怎么转换的呢?
首先,将buf指针指向的内容的前8个字节赋值给rdma_write_msg_head结构体的rwmh->len变量,然后再
将紧接着的1个字节的内容赋值给rwmh->flag。至于buf指针指向的内容中前9个字节后的内容,我认为会被舍弃掉。
 
在查询强制类型转换的资料时,看到了这样一个例子:
将一个十六进制的数赋值给一个整型变量,然后试图将这个整型转换为浮点型。
    1、首先直接对整型强制类型转换得到的结果为1112539136.000000.如果是对整型变量的地址进行转换,结果则不同。
    2、可以看到,下图中是对整型变量a的地址进行强制类型转换,得到的结果为52.000000.

总结:
        为什么方法1和方法2得到的结果不同呢?
        总结原因,可以这样认为:
                                                在方法1中,直接对整型变量a进行类型转换,那么会先将十六进制数作为整型处理,也就是1112539136,
                                                将1112539136强制转换为浮点型,那么得到的结果就是1112539136.000000.
                                                而在方法2中,将整型变量a的地址转换为浮点型的,那么要将变量a地址中的内存值转换为浮点型,就是将
                                                原地址值中的十六进制数按照浮点型的格式解释,从而得到结果52.000000.
 
PS.在测试实验的过程中,犯了一个简单的错误,从而得到了下面的问题:
在试图输出浮点型指针b的指针时,直接printf("%f",b);得到的结果为0.00000.

所以修改代码为printf("%f",*b);得到了结果52.000000.但是如果保留printf("%f",b);会再一次输出结果52.000000
一开始我以为这是codeblocks的编译器进行了缓存做了什么优化。但是在VC++编译器中运行这段代码得到了不同的结果。
 
 
在VC++中,同时出现printf("%f",*b);和printf("%f",b);输出的结果分别是52.00000和0.00000;所以这有可能是编译器的问题。

关于强制类型转换(c语言)的更多相关文章

  1. C语言结构体的强制类型转换

    陈浩师兄03年的一篇博客<用C写有面向对象特点的程序>描述了用C语言来实现类似C++类继承的方法,这样方法的核心要点就是结构体的强制类型转换,让我来简单分析分析C语言中的结构体强制类型转换 ...

  2. C语言中强制类型转换总结

    C语言中强制类型转换总结  ● 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围 ...

  3. C语言笔记 11_头文件&强制类型转换&错误处理&递归

    头文件 头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享.有两种类型的头文件:程序员编写的头文件和编译器自带的头文件. 在程序中要使用头文件,需要使用 C 预处理指 ...

  4. c语言强制类型转换

    一.强制类型转换 printf("3/2+100.5=%f",3/2+100.5);//100.5错误表达 printf ("    (float)3/(float)2 ...

  5. C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)

    强制类型转换形式:(类型说明符) (表达式) 举例说明:1) int a; a = (int)1.9; 2)char *b; int *p; p = (int *) b; //将b的值强制转换为指向整 ...

  6. C语言的强制类型转换

    1.什么是强制类型转换:遇到一些类型不同的一些数据之间的表达运算 ,需要将较高的数据类型转换成较低类型时. 2.强制类型的形式: (强制转换的类型)(表达式): 2.强制类型的使用: float a, ...

  7. C语言中的强制类型转换

    先直接放程序吧,后面还有总结. -------------------------------------------start------------------------------------ ...

  8. C语言:强制类型转换

    #include <stdio.h> //强制类型转换 //写法:(类型标识符)变量:(类型标识符)常量:(类型标识符)(表达式):三种格式 main() { float a=7.5f; ...

  9. C++强制类型转换

    C语言强制类型转换过于粗暴,任意类型之间都可以进行转换,编译很难判断其正确性; 难于定位,在源码中无法快速定位所有使用强制类型转换的语句. C++将强制类型转换分为4种不同的类型:static_cas ...

随机推荐

  1. python语法笔记(五)

    1.python内存管理 (1)对象内存使用 &nsbp;&nsbp;&nsbp;&nsbp;在python中通过执行内建函数 id(obj) 可以获得对象obj在内存 ...

  2. maven寻找jar

    http://mvnrepository.com/artifact/org.springframework/spring-context

  3. phalcon:model 事件与事件管理器

    事件与事件管理器(Events and Events Manager)¶ Models allow you to implement events that will be thrown when p ...

  4. ToolBar Style

    colorPrimaryDark 状态栏背景色. 在 style 的属性中设置. textColorPrimary App bar 上的标题与更多菜单中的文字颜色. 在 style 的属性中设置. A ...

  5. 任务栏右键工具栏里的语言栏没有的修复.reg

    任务栏右键工具栏里的语言栏没有的修复.reg Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\CLSID\{540D8A8B-1C3F- ...

  6. 小div在大div中垂直居中,以及div在页面垂直居中

    <html> <head> <title>淘宝 2faner</title> <style type="text/css"&g ...

  7. SAP SD你要知道的透明表

    一.客户主数据 基本数据放在KNA1里: 公司代码放在KNB1里: 销售视图放在KNVV里: 合作伙伴放在KNVP里: 二.信用主数据 KNKK里有信贷限额.应收总额.特别往来: S066里是未清订单 ...

  8. Unity4.3 遮挡剔除:基本知识

    http://blogs.unity3d.com/2013/12/02/occlusion-culling-in-unity-4-3-the-basics/ 这篇博文由Umbra Software的J ...

  9. HTML5 localStorage and sessionStorage

    转载至:http://blog.csdn.net/fdipzone/article/details/25517615 HTML5 提供两种web存储方法,localStorage 与 sessionS ...

  10. 025-ViewData、ViewBag与TempData概述

    Action向View传递数据很简单,方式也很多,最直接的就是我们向View传递Model,这本身就是MVC的意义所在.如果是显示一些消息,像是错误信息,可以使用ViewData.ViewBag.Te ...