读书人

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

发布时间: 2012-03-05 11:54:03 作者: rapoo

关于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个字节范围内的数值了 

读书人网 >C语言

热点推荐