问题描述
- C语言中的指针转换问题
-
代码如下# include<stdio.h> int main() { unsigned int a = 0xfffffff7 ; unsigned char i = (unsigned char)a ; char *b = (char *)&a ;//让b指向a的地址 printf ("%x, %x ", i, *b) ;//不懂:*b应该是char类型的,为什么结果会是4个字节? printf ("%08x, %08x ", i, *b) ; return 0 ; } /* result: f7, fffffff7 000000f7, fffffff7 */
printf ("%x, %x
", i, *b) ;//*b应该是char类型的,为什么结果是fffffff7,是4个字节?
解决方案
说错了。。。。。你在输出的时候,虽然B是一个指针,但是他是指向一个INT型的数据,你用%X输出,编译器会去这个地址去这个数据,一看,是个Int,就全打出来。*B是fffffff7的首地址,
解决方案二:
我说的对吗? ^_^
解决方案三:
你是强制它输出4个字节,FF是填充上去的,你设定了08
解决方案四:
若是32位机,则指针占4字节,若是64位机,则指针占8字节......
答案就在这里:c语言指针问题
解决方案五:
printf ("%x, %x
", (char)0xf7, *b) ;
这样你就明白了。(result: fffffff7, fffffff7 )
时间: 2024-08-03 18:09:01