变量或常量修改你不知道的奥秘 变量或常量修改你不知道的奥秘是什么

liftword5个月前 (12-17)技术文章65

有些变量其实可能是常量,修改将产生一些不预期的结果。

字符串修改

  • C语言字符串char *变量本质是指针, 如果是字面量初始化,存放位置可能位于只读区,修改内容将产生崩溃。
    • char s[] = "hello"与char *s = "hello"截然不同,前者一定可修改,而后者不一定。反汇编这两段代码,能看到区别在于后者会直接取指针赋值,前者会有拷贝或初始化动作。
    • 编译器如果把字符串字面量放在.rodata区,程序运行后对应内存页面就是只读的,写此区域将发生内存异常。
    • C修改字符串字面量的行为是未定义的。
    • 另外上面数组s是常量,不能再被赋值。


  • C++标准明确指出字符串字面量是const类型。C++修改字符串字面量的行为一定会出错。
    • 对于string str = "abcd"赋值的变量允许修改,str构造时有申请空间保存"abcd".


  • Java string是常量,StringBuilder和StringBuffer是可修改的,StringBuffer是线程安全,访问起来可能更慢。


  • C# string和Java一样是常量,StringBuilder是可修改的。
  • Java和C#把string默认当常量,其实是为了优化,常量可以提前优化在某个地址,这和C/C++字符串char *字面量可能被优化是类似的。
  • C++ string不像C#和Java那样,它默认可修改。






若文章对您有帮助,欢迎关注。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

相关文章

Python小白进阶学与练(2)——变量与常量

变量Python中的变量就类似一个标签,标签贴在什么上就代表什么。在python中变量只有被赋值才能被创建。变量的赋值由三部分构成:# 变量名 赋值符号 变量值 name = val...

Python中如何使用断言-assert,它起到什么样的作用

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理本文章来自腾讯云 作者:somenzz私信小编回复01可领取学习资料以及学习视频今天...

小学生有必要学习Python 吗?答案是:看个人情况

最近跟家长聊天,谈及小学生有没有必要学习Python,简单谈一下自己的看法。该不该去学Python,要看孩子个人情况!如果孩子数学成绩还可以,有空余的时间,建议学习一下,还是挺好的。如果孩子学习本身就...

8.python学习笔记-类 python中类有什么用

类的定义面向对象编程提供了一种有效的软件管理方式,通过编写描述现实世界中的事物和情景的类,可以定义同类对象的通用行为,继承父类的子类可以定制个性化的行为。根据类创建对象的过程称为实例化,指定可在实例中...

Python 中的内存管理 关于python内存管理

Python 中一切皆对象,这些对象的内存都是在运行时动态地在堆中进行分配的,就连 Python 虚拟机使用的栈也是在堆上模拟的。既然一切皆对象,那么在 Python 程序运行过程中对象的创建和释放就...

Python教程:第11篇 变量赋值 python中变量赋值语句例子

在前几篇中,我们已经学习了如何在Python中表示字符串、数值、逻辑值等字面值数据。也学习了如何使用变量引用这些数据。本文开始学习如何操作这些数据。操作数据最常用的方式是使用运算符。运算符即对数据进行...