字符串小知识点

2016-04-08  本文已影响38人  AwesomeAshe

1,两种申请字符串的区别:
我们经常会用这两种方式去申请字符串/字符数组:

char s1[] = "abc";
char *s3 = "abc";

然而这两者是有区别的:

我们运行如下的测试代码:

    char s1[] = "abc";
    char s2[] = "abc";
    char *s3 = "abc";
    char *s4 = "abc";
    if (s1 == s2)
        std::cout << "s1=s2" << "\n";
    else std::cout << "s1!=s2"<<" : s1="<<&s1<<" ,s2="<<&s2 << "\n";
    if (s3 == s4)
        std::cout << "s3=s4" <<" ="<<&s3<< "\n";
    else std::cout << "s3!=s4" << "\n";

运行结果:


code-1

解释:

而这两者的访问属性也是不一样的:
s1[0] = 'd'; std::cout << s1;
可以成功运行;

但是如果这样的话,编译可以通过,运行崩溃:
s3[0] = 'd'; std::cout << s3;
也就是说s3指向的内存是不可以被改变的。

上一篇下一篇

猜你喜欢

热点阅读