这篇笔记说的是关于c/c++中的类型转换的东西,重点是与指针有关的类型。
1、强制类型转换
看一下这个c代码:
int a = 0x123456; //0x是十六进制的表示法
char c = (char)a;
printf("%d/n", c);
在我的编译环境里输出的是什么呢? 是86,怎么得来的呢?(我的编译环境见“概述”)
int a的内存如下(左边是低地址的内容,右边是高地址的内容):0x56 0x34 0x12 0x00
"是不是搞反了?" 有人奇怪(正如我当年~~~~~~),这个问题还得详细讨论,但不是在这里,是在别的文章,上google搜一下“little endian”,看一下相关的知识,然后再回来看啊。(我用的是intel x86系列的cpu,所以是little endian序的)
(little endian序的内容就是:低字节数据放入低地址,高字节数据放入高地址,比如上面的56是低字节,所以放入低地址)
现在转换到char,char在我的环境里占一字节,(char)a的意思就是,取a中的第一个字节出来,就是0x56了(5 * 16 + 6 = 86)
这就是c语言中基本类型的强制类型转换。
(不知道上面的方法给了你什么启发,比如
1、强制类型转换
看一下这个c代码:
int a = 0x123456; //0x是十六进制的表示法
char c = (char)a;
printf("%d/n", c);
在我的编译环境里输出的是什么呢? 是86,怎么得来的呢?(我的编译环境见“概述”)
int a的内存如下(左边是低地址的内容,右边是高地址的内容):0x56 0x34 0x12 0x00
"是不是搞反了?" 有人奇怪(正如我当年~~~~~~),这个问题还得详细讨论,但不是在这里,是在别的文章,上google搜一下“little endian”,看一下相关的知识,然后再回来看啊。(我用的是intel x86系列的cpu,所以是little endian序的)
(little endian序的内容就是:低字节数据放入低地址,高字节数据放入高地址,比如上面的56是低字节,所以放入低地址)
现在转换到char,char在我的环境里占一字节,(char)a的意思就是,取a中的第一个字节出来,就是0x56了(5 * 16 + 6 = 86)
这就是c语言中基本类型的强制类型转换。
(不知道上面的方法给了你什么启发,比如