char *s = "china";等价于 char *s;s = "china";对不对?

如题所述

这个问题嘛,最好不这样写,加上const好些:
const char *s="china";
或者:
const char *s;
s="china";
如果不加const,编译也是可以通过的。这是有历史原因的。
"china"在表达式这样执行:在只读内存中非配一块区域存储"china"这个字符串,"china"则表示这个字符数组(它并不是表示指针,虽然在表达式中可以理解为指针!这是因为sizeof("china")的值是数组的长度,而sizeof(指针)的长度是4)。甚至这样的表达式是可以的:"china"[1],它表示字符'h'。
标准规定,关于指针赋值,被赋值的指针(s)所指的对象(即char)应该包含赋值号(=)右边指针所指对象(即const char)的一切限定符。
从这里看,似乎char *s="china"是不合法的,但是在const成为C的关键字之前,大量的代码都是这样写的,所以后来对这种写法给予特赦。但我觉得不应该提倡。

至于lz的问题,执行效果是相同的,可以认为是等价。
参考资料:《C专家编程》
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-08-14
不对!
char* s="china";//字符串常量
s[0]='C';//字符串常量不能改变,程序会报错。
printf("%s",s);

char *s;是定义一个普通指针,然后可为其赋值。
不过,应加上s=new char[6];

char* s;
s=new char[6];
sprintf(s,"%s","china");//赋值
s[0]='C';
printf("%s",s);//成功
第2个回答  2007-08-13
不是这样的
char *s;s = "china";是错误的;
具体可认真学习
C traps andpit falls
第3个回答  2007-08-12
没有错,LZ您是正确的
第4个回答  2007-08-13
这种问题都来问,那你就算问了100万个问题,你还是不会编程
相似回答