#include<stdio.h>
int main(){
char *string="I love China";
printf("%c\n",string);
return 0;
}
我用vs2005执行结果是“?”
上网查了,有一篇文章“作者:Lemon_jay
来源:CSDN
原文:https://blog.csdn.net/lemon_jay/article/details/82917000 ”,这篇文章意思是这是将字符串指针的值的十进制形式输出,但%c要求输出字符,将地址值转换为对应的字符输出,网上又有讲大于127的整型用%c输出要截取低位。
我的理解是:string类型是char *,占内存是四个字节,值是16进制数,我调试string是0x004157b8,十进制是4282296,那么是直接把0x004157b8去截取低位b8,还是把string先转十进制数4282296,变成整型常量,再用int存储,而整型存储又是以补码存放(当然这个正数补码就是原码),再截低位b
8?
b8十进制是184,书上ASCII码值中有从0到127,这个184怎么办,为什么输出是“?”,网上好像讲标准ASCII 码也叫基础ASCII码,使用7 位二进制数,第1位二进制为0,而这里184二进制是10111000,第一位是1。
还有,我把上面的数十进制4282296以及把它加1加2(即4282297,4282298)这样输出,
#include<stdio.h>
int main(){
char *string="I love China";
printf("%c\n",4282296);
return 0;
}
结果都是“?”
这样是不是把这两个整型常量先用int存储,分别是0x004157b9和0x004157ba,再截取低位,即b9和ba,十进制为185,186,还是不在127范围内,二进制为10111001,10111010,第一位还是1,这是不是说截了低位也就是只有8位二进制数后第一位是1,输出都是“?”?
网上又有讲将300,400输出,也就是如下:
#include<stdio.h>
int main(){
char *string="I love China";
printf("%c\n",4282296);
return 0;
}
300结果是“,”,400结果是“?”,300二进制是100101100,400二进制是110010000,这个又是不是这样:300,400都是整型常量,都被内存以0000000100101100和0000000110010000存储,再截取低位,300为00101100,400为10010000,而00101100十进制为44,%c输出就是“,”,10010000第一位是1,输出就是就是“?”?
希望各位大神能详细指教,万分感谢·