unsigned int 型的指针强制转化成一个char型的指针,不会有问题吗? #include <stdio.h>int main(){unsigned int a=0xFFFFFFF7;char *b=(char*)&a;printf("%8x",*b);return 0;}此处&a的结果应该是一个指针,它的类型取决于a的类型,此处&a的类型应该是:unsigned int *;(char*)&a不会有问题吗?从结果看是没问题,但不知道原因! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 &a是个地址,而char *b是个指针,用指针指向地址何错只有?char *和unsigned *其实都是一样的,不同的地方是所拥有的字节数不一样,char是一个字节,而unsigned是四个字节 这个和 平台有关对于 PC x86的系统来讲,是LBA,也就是说 0xFFFFFFF7 排列是 F7 FF FF FF,所以 &a 指向的是 F7。如果换环境,比如 MCU,DSP 或者 MIPS 等,他们都是 MBA 的,FF FF FF F7,&a 会指向第一个 FF。 在内存里有一些数据,如 0xFFFFFFF7现在用两种类型的指针去读取:1、整型指针2、字符指针它们虽然读取一个地方的数据,但读取的长度不同:1、整型指针 一次 读 4 个字节的内容2、字符指针 一次 只读 1 个字节的内容注意:这里存在一个高低地址的问题,但道理是这个。上面是我的理解,如果问题,欢迎 PK 指针都一样,都是四字节,指针等于指针没错。关键是你要取里面的内容时就要注意了!!printf("%8x",*b);只取了1个字节的数据,而实际上是4字节的!! 要想保证不出错, 转换之前先判断该int的大小,如果已经超过char的范围, 另做处理 . 上面先抢个沙发,下面在来详细解释一下:比如下面的内存结构: 地址 值 0x1234 0 0x1235 0 0x1236 0 0x1237 0假设 int a=0;就是如上所述的结构那么 char *b=(char*)&a;其实就是将b指向0x1234的位置,b+1=0x1235,b+2=0x1236,.....如果编译器检查不是那么严格的话,你甚至可以这么写: void * p=&a;也就是说(char*)&a中的(char *)只是为了满足编译器的类型检查而已,最终&a的第一个字节的地址都赋值给b int a=0;char *b=(char *)&a;这并不是把四个字节转换成一个字节啊,这句话的作用只是将一个int类型变量的首地址赋值给一个char类型的指针变量.赋值过后b里面存的是地址啊,不要以为它是数据. 我想问,为什么print出来的是4个字节的数据?不是1个字节的呢? 据说是因为printf函数的问题,进行了扩展 中兴薪资咨询 关于界面,如果点击图标,窗口弹出,在点击图标时,不会出现第二个窗口,该咋做啊 关于ATL自制ActiveX控件的2个问题 如何提高重绘制速度 请问同步和异步都是指的什么?具体有什么区别 关于什么时候delete的问题,求指导 关于在OPC上添加多个ITEM的问题 视频数据压缩完后保存为标准视频文件问题 VC翻转JPG图像 讨论:com会成为未来软件的开发方法吗? VC6/ado/access数据库 记录的插入SQL语句。 紧急求助!!!debug assertion failed
char *和unsigned *其实都是一样的,不同的地方是所拥有的字节数不一样,char是一个字节,而unsigned是四个字节
在内存里有一些数据,如 0xFFFFFFF7
现在用两种类型的指针去读取:1、整型指针2、字符指针
它们虽然读取一个地方的数据,但读取的长度不同:1、整型指针 一次 读 4 个字节的内容2、字符指针 一次 只读 1 个字节的内容注意:这里存在一个高低地址的问题,但道理是这个。
上面是我的理解,如果问题,欢迎 PK
printf("%8x",*b);只取了1个字节的数据,而实际上是4字节的!!
如果已经超过char的范围, 另做处理 .
比如下面的内存结构:
地址 值
0x1234 0
0x1235 0
0x1236 0
0x1237 0假设
int a=0;
就是如上所述的结构
那么
char *b=(char*)&a;
其实就是将b指向0x1234的位置,b+1=0x1235,b+2=0x1236,.....
如果编译器检查不是那么严格的话,你甚至可以这么写:
void * p=&a;
也就是说(char*)&a中的(char *)只是为了满足编译器的类型检查而已,最终&a的第一个字节的地址都赋值给b
int a=0;
char *b=(char *)&a;
这并不是把四个字节转换成一个字节啊,
这句话的作用只是将一个int类型变量的首地址赋值给一个char类型的指针变量.
赋值过后b里面存的是地址啊,不要以为它是数据.