首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于printf的一个有意思的小疑点

2012-03-05 
关于printf的一个有意思的小问题如果在程序中有这样的句子:int i 1024char *str //三个空格那么

关于printf的一个有意思的小问题

如果在程序中有这样的句子:

int i = 1024;
char *str = " "; //三个空格

那么内存中肯定是这样存储的吧:

(上面代表地址高位,下面代表地址低位)

i

00000000
00000000
00000100
00000000

&i指向最下面的00000000

str 

00000000
00100000
00100000
00100000

str指向最下面的00100000

那么显示的时候肯定是

printf("%d",*(&i)); //也就是i,显示1024
printf("%d",*str); //显示 32 * (2 ^ 16) + 32 * (2 ^ 8) + 32

但是,下面显示的并不对 而只是一个32 为什么呢?

[解决办法]

C/C++ code
printf("%d",*str);//这样只能输出32,原因就是一个char的大小就是1个字节(8位),所以只能输出1个字节范围内的数值,字符串只是相当于n个char组成的数组printf("%d",*(int *)str);//把char指针转换成int指针就行了,这样就能获得int类型一样的待遇,就能输出4个字节范围内的数值了 

热点排行