看看这两个C++程序的区别

来源:百度知道 编辑:UC知道 时间:2024/05/11 18:41:22
#include<iostream>
#include <string>

main()
{
//char *s="shipengxin";
//strrev(s);
char s[11]="shipengxin";
strrev(s);

return 0;

}

为什么我现在的程序可以正确执行,实现strrev函数的功能调换字符串的顺序,而用注释的那两行确达不到这个效果,他们的S同样都是指向的字符串的首地址啊,哪位大牛给解释下吧 谢谢了

不论c还是c++,结果是一样的,上面那个不能修改,下面的可以。

//char *s="shipengxin";
//strrev(s);
因为,这个s,并没有自己的空间,而是指向了一个常量"shipengxin";

char s[11]="shipengxin";
strrev(s);
这里的2,有自己的空间(11个字节),并且用常量"shipengxin"给它进行了赋值
也就是说,常量占用自己的空间,变量s也占有自己的空间

对于不修改s的情况下,应该使用前面那种,因为少占用一块空间
而对于要修改的情况,则需要使用后者。

我在WIN-TC环境中运行正常,你可能在VC6中运行的吧。
C语言对char *s="shipengxin"; 不做任何修改
C++对char *s="shipengxin"; 会做默认的const char *s="shipengxin"; 修改

char *s="shipengxin";
s是一个字符串常量,是不能被修改的

关注中。问题不错!