/*2022.04.01目的:验证字符串在数组、文字常量区、堆区三种存储空间中的是否可以被修改。功能:1、字符串存储在字符数组(非const修饰)中是可以被修改的;2、字符串存储在文字常量区是不可以被修改的;3、字符串存储在堆区是可以被修改的。
*//* 字符串存储在字符数组(非const修饰) */
#include <stdio.h>
#include <malloc.h>
#include <string.h>#if 0
int main(void)
{char cArry[10] = "I LOVE C!"; /* 分析:1、将字符串存放在这个字符数组中;2、并且cArry是数组名,表示的是第一个元素的地址。*/int iArry[5] = {1,2,3,4,5};//printf("Line = %d, %d\n", __LINE__, iArry); //printf("Line = %d, %d\n", __LINE__, *iArry);/* 特别注意:1、为什么利用字符数组的数组名就可以直接打印出字符数组的内容,而整型数组的内容打印不出来? 因为这是一种语法,记住就可以!!!2、虽然第1条中的语法中,整型数组和字符数组是不一样的,但是不管是什么类型的数组,他们的数组名都是存放的数组第一个元素的地址,也代表了这个数组的地址。*/printf("Line = %d, %s\n", __LINE__, cArry);            /* 打印字符数组内容的语法,直接打印字符数组的名字就可以打印出来字符数组的内容 */printf("Line = %d, %c\n", __LINE__, *cArry);        /* cArry存放的是数组第一个元素的地址,那么*cArry就是这个元素本身,但是注意的是占位符号是%c */printf("Line = %d, %c\n", __LINE__, *(cArry + 1));  /* *(cArry + 1)表示的就是字符数组中第二个元素这个值本身 */cArry[0] = 'Y';                             /* 修改字符数组中元素的值的方法之一 */printf("Line = %d, %s\n", __LINE__, cArry);*cArry = 'I';*(cArry + 2) = 'N';                         /* 修改字符数组中元素的值的方法之一 */printf("Line = %d, %s\n", __LINE__, cArry);return 0;
}/*程序运行结果:Line = 28, I LOVE C!Line = 29, ILine = 30,Line = 33, Y LOVE C!Line = 37, I NOVE C!
*/#endif
#if 0/* 字符串存储在文字常量区是 */
#include <stdio.h>
#include <malloc.h>
#include <string.h>int main(void)
{char* pArry = "I LOVE C!";printf("Line = %d, %s\n", __LINE__, pArry);pArry = "Y LOVE C!";printf("Line = %d, %s\n", __LINE__, pArry);pArry[0] = 'Y';printf("Line = %d, %s\n", __LINE__, pArry);*pArry = 'Y';printf("Line = %d, %s\n", __LINE__, pArry);/*分析:1、通过运行结果是可以看出,后面修改的内容都无法打印出来,pArry[0] = 'Y';*pArry = 'Y';两种形式都不可以修改其中的内容;2、是因为 pArry 指向的是文字常量区的内容,文字常量区的内容是不能被修改的;3、但是 pArry这个指针变量存储的地址是可以被修改的,也就是说 pArry 所指向的内容是可以被修改的。*/return 0;
}/*程序运行结果:Line = 57, I LOVE C!Line = 60, Y LOVE C!
*/#endif

/* 字符串存储在堆区 */
#include <stdio.h>
#include <malloc.h>
#include <string.h>int main(void)
{char* pArry = (char*)malloc(sizeof(char) * 20);strcpy(pArry, "I LOVE C!");printf("Line = %d, %s\n", __LINE__, pArry);*pArry = 'Y';printf("Line = %d, %s\n", __LINE__, pArry);*(pArry + 2) = 'N';printf("Line = %d, %s\n", __LINE__, pArry);pArry[0] = 'S';printf("Line = %d, %s\n", __LINE__, pArry);/* 但是堆区这个字符串的内容的修改性和字符串存储到字符串数组中的字符串修改性是一样的 *//* 注意下面的代码是将pArry这个指针变量指向 I NOVE C!! 这个字符串的内容,那么此时这个存储的内存已经不在堆区了,在文字常量区,那么根据文字常量区字符串内容修改的特性可以知道是无法打印出来的 */pArry = "I NOVE C!!";printf("Line = %d, %s\n", __LINE__, pArry);*pArry = 'Y';printf("Line = %d, %s\n", __LINE__, pArry);*(pArry + 2) = 'N';printf("Line = %d, %s\n", __LINE__, pArry);pArry[0] = 'S';printf("Line = %d, %s\n", __LINE__, pArry);return 0;
}/*程序运行结果:Line = 94, I LOVE C!Line = 97, Y LOVE C!Line = 100, Y NOVE C!Line = 103, S NOVE C!Line = 106, I NOVE C!!
*/
/*2022.04.06目的:在学习 const 这个关键字的时候,发现对“字符串存储在字符变量区”的一个错误理解,纠正这个错误功能:*/#include <stdio.h>int main(void)
{char buff[6] = "Hello";  /* 定义了一个字符型数组,并且在数组中存储了一串字符串 */char* str = buff;        /* 定义了一个字符指针变量,将数组的地址赋值给这个指针变量,该指针变量指向数组存储的内容 *//* 特别注意:由于在字符串的可修改性中讲到,存储在字符变量区的字符串是不能被修改的,导致这里我理解成了数组中的内容换了一个存储的区域,其实没有,只是将数组的地址赋值给了这个字符指针变量 */*str = 'L';printf("Line = %d, buff = %s\n", __LINE__, buff);*(str + 1) = 'b';printf("Line = %d, buff = %s\n", __LINE__, buff); /* 从上面两个的赋值修改打印出来的结果可以知道理解出了问题,给予纠正 */return 0;
}/*程序运行结果:Line = 17, buff = LelloLine = 20, buff = Lbllo
*/

字符串存储的可修改性相关推荐

  1. md5后得到的32位字符串存储到mysql中太占空间了_好看!快收藏:非常完整的 MySQL 规范...

    一.数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名 ...

  2. java实现将图片读取成base64字符串,将base64字符串存储为图片。

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现将图片读取成base64字符串 ,将base64字符串存储为图片. 将图片转化为字符串以后,由于字符串更方便在网络上通过ajax传输. ...

  3. md5后得到的32位字符串存储到mysql中太占空间了_面试官:你对MySQL高性能优化有什么规范建议?...

    推荐阅读:吊打面试官!MySQL灵魂100问,你能答出多少? 文章篇幅较长,建议先收藏再找个合适的时间阅读 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用 ...

  4. c语言无视数据类型字符串存储,C语言基础-第二课-数据类型与运算符(示例代码)...

    1   C语言中的数据类型 1.1   常量 常量就是在程序中不可变化的量,常量在定义的时候必须给一个初值. 1.1.1#define 定义一个宏常量 1.1.2const 定义一个const常量 1 ...

  5. java clob存储_java oracle clob string 大字符串存储

    [导读]单位用到了oracle存储string类型到数据库里的clob,上网查看资料找到解决方案. 单位用到了oracle存储string类型到数据库里的clob,上网查看资料找到解决方案.如下:pu ...

  6. java图片转成字符串_JAVA将图片(本地或者网络资源)转为Base64字符串,将base64字符串存储为本地图片...

    网络资源代码 import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOExcep ...

  7. java动态数组储存敌机_如何使用参数通过graphql将动态数组字符串存储为neo4j中的节点属性?...

    我正在使用Neo4j(3.2.3)和graphql . 我试图通过graphql在用户的单个属性中添加多个电话号码(动态)作为字符串数组 . 因此,用户可以拥有与他/她想要添加的电话号码一样多的电话号 ...

  8. oracle怎么从大字段中取节点,Oracle数据库 获取CLOB字段存储的xml格式字符串指定节点的值...

    参照: Oracle存储过程中使用游标来批量解析CLOB字段里面的xml字符串 背景:在写存储过程时,需要获取表单提交的信息.表单信息是以xml格式的字符串存储在colb类型的字段dataxml中,如 ...

  9. JAVA进阶开发之(String字符串的存储原理)

    我们现在开始学习的就是一些工具类 这些工具类只需要我们学会查阅帮助文档进行开发就可以实现很多功能 例如:我们查看工具类String 关于java JDK中内置的一个类:java.lang.String ...

最新文章

  1. java线程实现方式
  2. 【MySQL】按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
  3. .net一个函数要用另一个函数的值_【195期】MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?...
  4. python程序开发正则表达式_python正则表达式的使用(实验代码)
  5. 手把手教你--JAVA微信支付(H5支付)
  6. IE6-IE9兼容性问题列表及解决办法_补充之五:在IE9下, disabled的文本框内容被选中后,其他控件无法获得焦点问题...
  7. scikit_learn逻辑回归类库
  8. (49)System Verilog字符串string详解
  9. tomcat运行时候出现java.net.BindException: Address already in use: JVM_Bind错误解决方法
  10. 数学 - 线性代数导论 - #9 Ax=b的解:存在性、解法、解的结构、解的数量
  11. 小米手机上的云便签怎么把数据导出电脑
  12. 怎么翻译Excel表格?两个方法可以轻松翻译Excel
  13. linux 的top命令详解
  14. twisted中的延迟(deferred)(一)
  15. 多个wifi路由器组建一个wifi网络增加网络覆盖范围
  16. Hadoop2.6.0学习笔记(九)SPOF解决方案Quorum机制
  17. 3D目标检测SE-SSD 模型工程化复现
  18. 上周回顾:华为拥抱赛门铁克 误杀事件走向法庭
  19. 好朋友进平安了...
  20. USB标准协议下载地址

热门文章

  1. C语言判断字符串为空
  2. 2021年最近超火的外卖cps小程序
  3. python selenium高级教程_selenium(python)教程
  4. Codeforces: TMT Document
  5. 2021年全球浮球液位开关收入大约654.3百万美元,预计2028年达到840.2百万美元
  6. Java工作4年从美团、百度、阿里、京东面试回来感想
  7. python调用google translate API(谷歌翻译) 的使用方法-手动构造HTTP 请求模式
  8. echarts地图显示出各个省份区域对应的省会名称
  9. python数组赋值给另一个数组_使用numpy数组为另一个数组赋值
  10. 一、产品经理——【岗位和能力要求】【项目流程】【产品体验报告】