回复 12 楼 TonyDeng
版主,说实话,我还真不知道为什么会有那样的输出.
测试一下,输出了"AB",不过不明白为什么.尽管知道两个字符对应的ASCII码,仍旧没想明白.
为什么text.x就成了字符串了?
对于楼主在21楼提到的
程序代码:
谢谢4楼和6楼的提醒,也谢谢斑竹以及其他人的帮助,我对printf理解错了
char *string
*string="I love china"
如果要输出字符串用printf(%s\n,string)而不是printf(%s\n,*string),
不过我很好奇printf(%s\n,*string)会输出什么,没法用电脑跑- -
本人亲测在不同的编译器下会有不同的结果,
添加适当的代码后成为
程序代码:
#include <stdio.h>
int main()
{
char *string;
*string="I love china"; //注释1
printf("%s\n",string);
printf("%s\n",*string); //注释2
return 0;
}
此代码在Digital Mars C/C++下会报错误:
from char *
to
char,
errorlevel 1.
说明了出现了不同类型的赋值操作.
而在MinGW3.4.5下只给出一条警告:
[Warning] assignment makes integer from pointer without a cast.英语不好,不知道如何翻译才能表达出准确的意思.大概意思就是不准确的赋值(从指针转换为整型).
另外,在注释2那个地方,系统会报内存不能读的错误.
把注释1那一行的*去掉,把注释2那一行的控制字符s换成c可以顺利通过. 第一个printf()输出字符串,第二个输出字符I.
个人的理解是string代表的是整个的字符串,而*string是一个确切的地址,指向的是string的首字符.