关于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 为什么呢?
[解决办法]
printf("%d",*str);//这样只能输出32,原因就是一个char的大小就是1个字节(8位),所以只能输出1个字节范围内的数值,字符串只是相当于n个char组成的数组printf("%d",*(int *)str);//把char指针转换成int指针就行了,这样就能获得int类型一样的待遇,就能输出4个字节范围内的数值了