字符串常量

  1. 有些编译器把多个相同的字符串常量看成一个(节省空间),有些则不进行此优化
//1、字符串常量 vs下是可以共享的
void test01()
{char * p1= "hello world";char * p2 = "hello world";char * p3 = "hello world";printf("%d\n",&"hello world");printf("%d\n", p1);printf("%d\n", p2);printf("%d\n", p3);
}

  1. 字符串常量不可修改(vs环境下)
void test01{char * p1 = "hello world";//字符串常量,指针p1指向了这个字符串的首地址printf("%d\n", p1);printf("%c\n", p1[0]);//p1[0] = 'W'; //不允许修改 常量区内容printf("%s\n",p1);//无法打印,程序出错
}

这里的字符串“hello world”是在常量区中的,定义了一个指针变量p1指向这块常量区,但是常量区中的数据是不允许修改的;

上述案例中字符串常量修改失败,但这不是绝对的

  • 有些编译器把多个相同的字符串常量看成一个(节省空间),有些则不进行此优化
  • ANSI C中规定:修改字符串常量,结果是未定义的
  • 有些编译器可修改字符串常量,有些编译器则不可修改字符串常量

字符串变量

void test02{char p1[] = "hello world";printf("%d\n", p1);printf("%c\n", p1[0]);p1[0] = 'W'; //允许修改printf("%s\n",p1);//打印输出Wello world
}

这里的p1是一个字符数组,相当于字符串变量,字符串“hello world”是在常量区中,但是函数调用的时候定义了一个字符数组p1用来存放字符串,从常量区拷贝了一份放在了栈区;实际修改并不是常量区中的那个“hello world”,而是修改栈区字符数组中的数据,所以可以修改成功,正常打印输出;
总结:尽量不要去修改字符串常量;一般情况下字符串常量不可修改,强制修改程序报错或崩溃,但某些编译器下允许修改;

字符串常量和字符串变量相关推荐

  1. python定义符号常量_Python将字符串常量转化为变量方法总结

    前几天,我们Python猫交流学习群 里的 M 同学提了个问题.这个问题挺有意思,经初次讨论,我们认为它无解. 然而,我认为它很有价值,应该继续思考怎么解决,所以就在私密的知识星球上记录了下来. 万万 ...

  2. java键盘输入字符串静态变量_Java 中为什么样在静态方法中可以调用的方法、可以使用的成员变量必须是静态的?老师说字符串常量和静态变量放在data segment中...

    在上一篇文章中,小编为您详细介绍了关于<C字符串以'\0'结尾的问题?为什么样C语言字符串常量可以当做指针>相关知识.本篇中小编将再为您讲解标题Java 中为什么样在静态方法中可以调用的方 ...

  3. Java · 认识 String 类(上)· 创建字符串 · 字符串比较相等 · 字符串常量池 · 字符串不可变 · 字符字节与字符串

    目录 一.创建字符串 二.字符串比较相等 三.字符串常量池 3.1 直接赋值的内存情况 3.2 采用构造方法的内存情况 四.理解字符串不可变 五.字符.字节与字符串 5.1 字符与字符串 5.2 字节 ...

  4. 字符串常量与字符串变量

    参考:http://blog.csdn.net/chenwenshi/article/details/6702576 定义:在一个双引号" "内的字符序列或者转义字符序列称为字符串 ...

  5. Python进阶:如何将字符串常量转化为变量?

    2019独角兽企业重金招聘Python工程师标准>>> 前几天,我们Python猫交流学习群 里的 M 同学提了个问题.这个问题挺有意思,经初次讨论,我们认为它无解. 然而,我认为它 ...

  6. java字符串常量池——字符串==比较的一个误区

    转自:https://blog.csdn.net/wxz980927155/article/details/81712342 起因 再一次js的json对象的比较中,发现相同内容的json对象使用== ...

  7. C语言字符串常量与字符串数组的区别

    1.字符串常量只能读取,不能修改:字符数组可以读取和修改. 2.以指针形式赋值的字符串,只能修改字符串指针,不能修改字符串内容,而字符数组形式的字符串,可以修改字符串中的每个字符. 3.总结:C语言有 ...

  8. 字符串常量和变量是什么?

    以下是字符串常量的解释 变量: 顾名思义,变量是可变的,比如对应到我们的生活中,工资,年龄,身高,体重等,这些都是会改变的,并不是一成不变的,这就是变量. 我们可以这么理解 int n=10: 那么这 ...

  9. java8中字符串常量以及GC相应处理机制

    目录 1,常量池 1.1, class文件常量池 1.2, 运行时常量池 1.3,字符串常量池 String.intern() -XX:StringTableSize 2,使用new关键字和使用字符串 ...

最新文章

  1. 漫谈算法(番外篇) 符号标记以及基本数学公式
  2. android singleTop 不起作用
  3. python迭代数据类型_在大型数据集上自动迭代推断数据类型和最小项大小
  4. FreeSWITCH 总体架构
  5. TensorflowSharp 简单使用与KNN识别MNIST流程
  6. java怎么将前端的数据存到关联的表中_Java程序员最可能被考到的14个面试题
  7. SpringMVC之数据传递三Ajax与Controller交互
  8. linux上TCP connection timeout的原因查找
  9. 解决:CWnd::SetWindowText报Assertion failure
  10. 【hdu1506/牛客小A的柱形图】单调栈入门题目
  11. 园区网解决方案有哪些 园区网解决方案案例
  12. PADS2007_教程之PADS LAYOUT
  13. jad反编译成java_反编译工具jad的使用(将*.class文件变成*.java文件,附带jad.zip包)[转]...
  14. 苹果维修服务器gsx查询,手机苹果官网怎么查序列号(苹果gsx免费查询公众号)...
  15. 相控阵天线(十一):阵列天线有源驻波分析
  16. 一款小游戏集合自动脚本
  17. 路由器+虚拟服务器+ssh,如何实现用SSH方式登陆路由器管理
  18. 微信小程序 RangeError: WebAssembly.Memory(): could not allocate memory
  19. java持久化框架_众里寻他千百度-- 轻量级持久化框架-java-火龙果软件工程
  20. 打开exchange2007管理控制台时,提示没有读取服务器安全描述符的权限

热门文章

  1. Eclipse反编译插件--Jode Decompiler
  2. zigbee协议栈OSAL分析
  3. 基础类型(Primitives)与封装类型(Wrappers)的区别
  4. C语言中函数指针的主要应用场景
  5. 安装pytorch时InvalidArchiveError
  6. 施密特触发电路详细原理介绍
  7. 音频基础学习一——声音的本质、术语与特性
  8. 使用Netty实现RPC
  9. 基于组态王的水塔液位控制系统设计
  10. [原创]中国大陆民谣盘点9 贾南《来自校园的歌手》