- 论坛徽章:
- 0
|
本帖最后由 warmofice 于 2012-06-15 21:33 编辑
先看代码:
unsigned char arr[2] = {0xffff0101,0x00000001};
printf("%d\n", *((char *)&(arr[0])));
printf("%d\n", *((int *)&(arr[0])));
运行结果:
1
257
上文我能理解,知道指针类型决定了 *(指针)的值得取值范围。但是下文,我就不理解了。
unsigned int a = 0xfffffff7;
printf("%x\n", *((int *)&a));
printf("%x\n", *((char *)&a));
运行结果:
0xfffffff7
0xfffffff7
-----------------------------------------------------------------------
我不明白指针的类型是什么意思,我明白指针其实就是一个32位的整数,以前这么认为
比如:unsigned char *p 的值是0x00000004,所以 *p的值就是0x00000004的【值也也就是这个地址的8位二进制的和】;
比如:unsigned int *p的值是0x00000004,所以 *p的值就是0x00000004【开始的4个字节的二进制的和】;
而我发现,许多书上写的是,指针类型的转换只是影响的指针的寻址,不影响指针值,我迷惑了!希望有人来回答!
到底指针类型表示着什么? |
|