#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不会有问题吗?从结果看是没问题,但不知道原因!
解决方案 »
- 为什么VC编译出来的代码,反汇编里面建立SEH链是push -1这句话。
- vc6调试的时候出现 no matching symbolic information found 是怎么回事?
- 关于varient和cstring 转化的问题
- 用VC编写类似PhotoShop画笔的程序,对画笔的要求比较高,请问应该用什么?GDI?OpenGL?GDI+?
- 关于先启动一个DoModal对话框的问题
- 位图数据指针问题
- 为什么gallery文件夹是空的
- 如何在outlook中增加自己得button,就像词霸,realplay在ie中增加button一样。
- 《com原理和应用》这本书怎么样?
- CString取char*值的问题!值取到,可再赋值时为空,请问为什么??????
- 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里面存的是地址啊,不要以为它是数据.