美文网首页
字符串小知识点

字符串小知识点

作者: AwesomeAshe | 来源:发表于2016-04-08 21:19 被阅读38次

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

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

然而这两者是有区别的:

  • 在c/c++里面,为了节省空间,虚拟内存里面会有一块区域是存放字符串常量的。
    当几个指针赋值给相同的字符串时,指针会指向同一块内存;
    但是用常量内存初始化数组的时候,情况却不是这样:

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

    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,s2是字符数组,由于是数组,所以会申请一块新的内存然后把值放进去;
  • s3,s4是指向字符串的指针,指向的是同一块内存。

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

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

相关文章

  • spring 源码学习知识点(一) 2019-01-08

    1 小知识点 对字符串首字母小写char []chars = a.toCharArray();chars[0] +...

  • Java_字符串

    1.知识点: 不可变字符串 可变字符串 2.知识点运用: 1.不可变字符串: 1.字符串* 1. 不可变的字符串 ...

  • 字符串小知识点

    1,两种申请字符串的区别:我们经常会用这两种方式去申请字符串/字符数组: 然而这两者是有区别的: 在c/c++里面...

  • Python基础教程第1章 入门

    知识点: 字符串 单引号表示 双引号表示 长字符串 转义的概念 原始字符串 字符串拼接

  • 元编程:编写代码的代码

    知识点一:Binding类 知识点二:eval执行代码字符串 知识点三:钩子方法 案例

  • Day4字符串相关

    字符串知识点补充: 字符串又叫字符集。 空串:"",''。 空格字符串:" ",' '。 \t: tab键的长度是...

  • Day4

    字符串知识点补充: 字符串又叫字符集。 空串:"",''。 空格字符串:" ",' '。 \t: tab键的长度是...

  • Swift基础语法-字符和字符串--对比OC

    本节知识点 字符 字符串 字符串常用方法遍历字符串中的所有字符计算字符串长度字符串拼接格式化字符串字符串比较判断前...

  • 【Python基础】3.字符串

    本篇笔记知识点:-修改字符串字符串:修改大小写,拼接增加/删除空白下标&切片其他字符串常用操作 字符串 字符串:一...

  • (17.04.19)字符串方法、比较、数字比较

    回顾知识点: 在定时器里面,this是有问题的! 字符串:    js里面带引号的都是字符串! 字符串方法: 1....

网友评论

      本文标题:字符串小知识点

      本文链接:https://www.haomeiwen.com/subject/htwvlttx.html