注册 登录
编程论坛 C++教室

这个运行结果该怎么解释?

caiv5 发布于 2009-12-22 21:20, 1447 次点击
就是这个程序
#include<iostream>
#include<string>
using namespace std;
int main(){
    string s;
    s="c++ is great fun"+'\n';
    cout<<s<<endl;
    return 0;
}
运行结果  却是   at fun


哪位高手解释下?
13 回复
#2
shenyulv2009-12-22 23:58
帮你顶顶吧。。等待高手。。
#3
shiyuehai2009-12-23 09:27
我是初学者,我觉得后面+了个‘\n’字符,会把原先指向字符串首个字母的指针+上后面‘\n’的ASII码指到了a,然后就输出那样的结果了,不知道对不对
#4
fydgo2009-12-23 10:31
我也是初学者,等待ing
#5
秀痘魔导士2009-12-23 14:19
3L正解,
 s="c++ is great fun"+'\n';
string的操作符重载s = "c++ is great fun",s是指向这个字符串头的指针,加上'\n'这个偏移量后,指向了'a',那么输出结果就是'at fun'了。(换行符的ASCII码是10,你自己加一下,正好指向a)
  
  s="c++ is great fun";
  s.append("\n");

这么写没有问题



[ 本帖最后由 秀痘魔导士 于 2009-12-23 15:17 编辑 ]
#6
shenyulv2009-12-23 18:18
回复 5楼 秀痘魔导士
这里和换行符有什么关系啊?
#7
zhoufeng19882009-12-23 19:44
"C++ ..." 这是一个指针类型,'\n'是一个字符。
不知道C++有没有重载string类和字符的"+"运算符。
如果没有,就是将字符串的那个指针加上'\n'的地址..

学习学习..
#8
forclwy2009-12-23 20:59
string 还有这样儿的用法呢,学习了!
#9
hu33921002009-12-25 10:43
厉害!我指针学的不是很好啊!哈哈
#10
yxwsbobo2009-12-25 10:48
'\n'的类型是char

char 和int 是可以互换的

'\n' 被解释成10

所以相当于 s="c++ is great fun"+ 10
#11
newCpp2009-12-25 13:32
以下是引用yxwsbobo在2009-12-25 10:48:25的发言:

'\n'的类型是char

char 和int 是可以互换的

'\n' 被解释成10

所以相当于 s="c++ is great fun"+ 10
这问题!确实很神奇!!
呜呜呜!不过c++ is great fun 为什么只输出了10个字符后面的字符
前面的字符为什么会被灭了呢??这个又是为什么的呀?
不过好像你的这个回答应该是正确的才对!


[ 本帖最后由 newCpp 于 2009-12-25 13:34 编辑 ]
#12
yxwsbobo2009-12-26 12:58
以"c++ is great fun" 的第10个字符为起点的字符串 赋值给了 字符串变量 s
#13
guchao20092009-12-26 13:22
学习了

不过"C++ ..." 这是一个指针类型  这个用在程序中有什么好处呢?
#14
missiyou2009-12-26 14:15
    _Myt __CLR_OR_THIS_CALL operator+(difference_type _Off) const //——Myt   为基本字符型类的别名。
       {    // return this + integer  //返回this+ingteer,  返回自身加上整形,
        _Myt _Tmp = *this;
        return (_Tmp += _Off);
        }
********调用字符指针构造函数,重载 + .   返回前,在重载 += , 在调用类类型引用构造函数。
然后在 重载,=  号的,类类型引用重载函数。**********



    _Myt& __CLR_OR_THIS_CALL operator=(_Myt &S)
        {    // assign [_Ptr, <null>)
        return (assign(_Ptr));

内部代码。谁能说出大部分原理,说明你C++就过关了。
1