C语言 数据类型的转换问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 22:25:05
main()
{ char C;

scanf("%c",C);
printf("%c %d",C,C);getch();
}
输入C,得到结果:2 50

main()
{ char C;

scanf("%c",&C);
printf("%c %d",C,C);getch();
}
输入C,得到结果:C 67

main()
{ char C;

scanf("%s",C);
printf("%c %s %d",C,C,C);getch();
}输入C,得到结果:2 C 50

偶实在是被这几个弄糊涂了,谁能帮我解释一下这些结果形成的原因

在编译通过的情况下:
1.
scanf("%c",C); // scanf后面跟的是地址,所以不确定值C(未初始化)被认定为一个地址,并且该地址位置不确定(从后面的输出可以知道C的垃圾值是多少...),这一句可以理解为:scanf("%c",(char*)C);
printf("%c %d",C,C);getch(); // C没有初始化,所以这里输出的是C的不确定值,0-255间的任意值...
2.
scanf("%c",&C); // C得到输入的字符
printf("%c %d",C,C);getch(); // 输出C的字符格式和ASCII码
3.
scanf("%s",C); // 同1一样,C被认定为一个地址,位置不确定
printf("%c %s %d",C,C,C);getch(); // 以字符输出C的垃圾信息,以字符串输出C的信息,因为上面C位置得到了输入的字符串,所以这里输出的是上面所输入的字符串,以10进制输出C的垃圾信息(ASCII码).

-----------------
PS: 无端进行这种异类代码的测试或其它,只怕会害了自己.

肯定是你编译器出问题了,我拿你的代码去编译都是错,除了第二个
第一个 scanf("%c",C); //为什么在C前面不加&,我真看不懂你的答案怎么来
第二个是对的,因为C被强行转化成整形了,所以查常用字符与ASCLL代码对照表可以知道C为67
第三个,明明定义的C是字符类型,又不是字符串,怎么可以用%s输出呢,
你的答案哪里来的我就奇怪

第1,3个程序你C前面没加&,得到什么结果天知道

只能是语句理解了,运行是不行的。
没加&的话,只好理解为C就是个地址值了,后面的输出也就是该地址内的不确定信息。所以没什么大的意识啊。

楼主的问题有问题
例如第一题 运行就会崩溃