【c语言】字符串的基本概念 | 字符串存储原理

news2024/9/26 5:14:45

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

c语言系列专栏: c语言之路重点知识整合

字符串 目录

  • 一、字符、字符数组
    • 1.字符
    • 2.字符数组
  • 二、字符串
  • 三、字符串的存储原理
      • 字符串常量在代码中代表所在常量区的首地址(地址常量)

一、字符、字符数组

1.字符

字符char知识点:字符类型详解

每个我们看见的字符影像都有自己的影响编码,每个字符对应着各自的影响编码(ASCII码)

根据ASCII码,每个字符都有其各自的数字编码,通过使用数字编码即可打印出对应的字符影像

对于一个字符输出其%d格式为其数字编码,输出%c格式就是其字符影像

2.字符数组

定义一个字符数组:

	char s1[] = { 'T','i','a','n','X','i'};
	char s2[] = { 'T',105,'\141','\x6',01011000,'i','\n'};
	printf("%s\n", s1);		// %s 以字符串格式打印
	printf("%s\n", s2);

运行结果出现了乱码:

image-20230506084356443

原因:

s1,s2字符数组在打印时,并不知道该打印到哪里结束,因此需要一个代表结束的字符——‘\0’

在字符数组的末尾添加结束语’\0’,再来输出就没有乱码:

image-20230506084849461

如果将结束语提前,放在字符数组中间位置呢?

image-20230506085028132

再打印输出到a(\141)就结束了,因为遇到了’\0’。

%s会一致打印每个字符,直到遇到’\0’为止。约定的特殊字符一一即字符串的结束标记’\0’

二、字符串

通过数组的方式定义字符串太过麻烦,我们可以直接用一个双引号代表字符串。

	char str[50] = "TianXiCoding";
	printf("%s\n", str);

image-20230506085527990

使用调试器查看str数组,str数组在字符串的后面自动补上了’\0’

image-20230506085655511

同样在字符串中间添加’\0’就可以提前结束

image-20230506085736680

三、字符串的存储原理

我们先定义一个字符串,并且使用指针指向它,再用调试器查看

	 char str1[] ="TianXi";
	 char *p1 = "TianXi";
	 char *p2="TianXi";

执行前:str1为7个字符的字符数组,p1,p2为还未指向任何的指针

image-20230506090018681

通过上面的定义代码后,p1,p2被指向了同一个地址

image-20230506090256086

尝试对指针进行修改时发生了错误:

image-20230506090438494

原因就是TianXi字符串存放在常量区,"TianXi"字符串常量返回的就是他所在内存中的首地址。

当 char str1[] =“TianXi”;这条语句执行时,系统会在""常量区"寻找"TianXi"字符串常量,如果没有就创建一个。

由于str1为字符串数组,它会在栈区创建字符数组并把字符串常量的每个字符存入栈区的每个数组成员。

但是当执行 char *pl =“TianXi”:时,发现“常量区”有该字符串就把其首地址赋给p1,因此通过p1只能访问的第一个字符h, char *p2亦如此。所以p1和 p2指向同一个地址。

p1,p2在栈区指向常量区的字符串常量 首地址 不可改变

str1数组也在栈区 可以改变

修改str1数组,p1,p2没有发生变化:

image-20230506091109357

同样 这条语句也不可执行:str1 = “how”;

数组名是个地址常量 不可被修改,数组知识点详见数组存储原理

字符串常量在代码中代表所在常量区的首地址(地址常量)

和数组一样,我们可以通过地址偏移读取字符串中的字符

数组和指针知识点:利用指针操作数组

#include <stdio.h>
int main()
{
	 char str1[] ="TianXi";
	 printf("%c\n", "TianXi"[3]);	//地址[偏移]  *(地址+偏移)
	 printf("%s\n", "TianXi"+2);
	return 0;
}

image-20230506091643705

大家的点赞、收藏、关注将是我更新的最大动力!欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/495159.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring常用注解总结

目录 一、前言1、xml和注解的最佳实践&#xff1a;2、使用注解唯一需要注意的就是&#xff0c;必须开启注解的支持&#xff1a; 二、Spring的常用注解1、给容器中注入组件2、注入bean的注解3、JsonIgnore4、初始化和销毁方法5、Java配置类相关注解6、切面&#xff08;AOP&#…

DNS资源记录详解

资源记录&#xff08;resourse record&#xff09;就是域名服务器保存的记录&#xff0c;也是解析器请求的内容&#xff0c;资源记录保存在zone文件中。域&#xff08;domain&#xff09;&#xff1a;以 www.baidu.com 为例&#xff0c;com是一个域。baidu.com是一个域&#xf…

Selenium:三种等待方式

目录 一、显示等待 二、隐式等待 三、强制等待 UI自动化测试&#xff0c;大多都是通过定位页面元素来模拟实际的生产场景操作。但在编写自动化测试脚本中&#xff0c;经常出现元素定位不到的情况&#xff0c;究其原因&#xff0c;无非两种情况&#xff1a;1、有frame&#x…

Unity 光照

\\\\\\\ Unity烘焙&#xff08;Baking&#xff09;是指将场景中的动态光照转换为静态贴图。在烘焙过程中&#xff0c;Unity会将场景中的光源、材质和对象等信息计算出来&#xff0c;并存储为贴图。当玩家进入场景时&#xff0c;Unity只需要读取这些预计算好的贴图或者数据文件&…

2023年计算机视觉与模式识别国际会议(CCVPR 2023)

会议简介 Brief Introduction 2023年计算机视觉与模式识别国际会议(CCVPR 2023) 会议时间&#xff1a;2023年9月15日-17日 召开地点&#xff1a;英国牛津 大会官网&#xff1a;www.ccvpr.org 计算机视觉技术与模式识别是现代科学中备受关注的热点技术&#xff0c;它的革新对各行…

Monorepo开发策略详解

目录 一&#xff1a;什么是 Monorepo&#xff1f; 二&#xff1a;Monorepo 和其他结构的区别&#xff1a; 三&#xff1a;Monorepo的优缺点 3.1.优点 3.2.缺点 四&#xff1a;如何使用Monorepo 一&#xff1a;什么是 Monorepo&#xff1f; Monorepo 是一种将多个项目存放…

【iOS】—— RunLoop初学

RunLoop 文章目录 RunLoopRunLoop简介RunLoop基本使用Runloop伪代码Runloop模型图 Runloop对象Runloop对象的获取_CFRunLoopGet0方法 RunLoop的相关类RunLoop相关类的实现CFRunLoopRefCFRunLoopModeRef五种运行模式CommonModes什么是Mode Item&#xff1f;Mode到底包含哪些类型…

【SWAT水文模型】SWAT水文模型建立及应用第四期: 气象数据的准备(中国区域高精度同化气象站CMADS)

SWAT水文模型建立及应用&#xff1a; 气象数据的准备 1 简介2 气象数据的准备&#xff08;中国区域高精度同化气象站CMADS&#xff09;2.1 数据说明2.2 数据下载 3 CMADS 数据集SWAT子集使用说明3.1 SWAT2009版本3.2 SWAT2012版本 参考 本博客主要介绍气象数据的准备&#xff0…

HulaCWMS呼啦企业网站管理系统 v3.0.4

源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/87630654 HulaCWMS(呼啦企业网站管理系统)是基于ThinkPHP5框架开发&#xff0c;安全高效&#xff0c;包括ThinkPHP5的所有特性。专注于企业、政府单位网站建设&#xff0c;以免费开源的方式&#xff0c;帮…

python - 模块使用详解

前言 Python有非常强大的第三方库&#xff0c;也有非常多的内置模块帮助开发人员实现某些功能&#xff0c;无需开发人员自己造轮子。本文介绍Python的模块。 什么是模块 模块简单来说就是一系列功能的集合体&#xff0c;如果将程序的开发比喻成拼图&#xff0c;模块就是各种…

读懂海尔智家大脑:深度体验的本质是深度生活

了解科技行业的读者&#xff0c;应该都对“大脑”这个名词不陌生。 “黑灯工厂”里指挥生产的“工业大脑”&#xff0c;繁忙机场里运筹帷幄的“航空大脑”&#xff0c;还有智慧城市建设的灵魂“城市大脑”…… 如果家也有一颗总揽全局的大脑&#xff0c;生活会发生什么改变呢&a…

SuperMap GIS基础产品三维GIS FAQ集锦(2)

SuperMap GIS基础产品三维GIS FAQ集锦&#xff08;2&#xff09; 【WebGL】桌面对三维缓存设置了最大最小可见高度&#xff0c;在iServer发布三维服务并进行预览是可以看到该效果的&#xff0c;但在前端代码打开该服务&#xff0c;最大最小可见高度效果丢失&#xff0c;请问怎…

Makefile零基础教学(一)初识makefile

从这篇文章开始就开始进入 Makefile 的零基础教程&#xff0c;相信只要看了本教程的都可以对 Makefile 有一个清晰的理解和正确的运用。那么现在就开始我们的 Makefile 学习之路。 文章目录 一、什么是 Makefile&#xff0c;优点&#xff1f;二、什么是 make, 为什么使用make?…

可拓展哈希

可拓展哈希 借CMU 15445的ppt截图来说明问题。 我们传统静态hash的过程是hash函数后直接将值存入对应的bucket&#xff0c;但是在可扩展hash中&#xff0c;得查询Directory&#xff08;左&#xff09;&#xff0c;存入directory指向的bucket&#xff08;右&#xff09;。 下面…

linux线程池、基于线程池的单例模式、读者写者问题

线程池&单例模式 一、什么是线程池二、设计思路三、代码实现四、基于线程池的单例模式4.1 懒汉模式设计思路 五、读者写者问题及读写锁 一、什么是线程池 线程池: 一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个…

flashback database 深入学习

一.FlashbackDatabase 和 Restore Points 说明 OracleFlashback Database and restore points are related data protectionfeatures that allow you to rewind data back in time tocorrect any problems caused by logical data corruption or user errors within adesignate…

gopher 初探

文章目录 gopher协议简介发送GET请求curlgopher gopher发POST请求 gopher协议 简介 Gopher是Internet上一个非常有名的信息查找系统&#xff0c;它将Internet上的文件组织成某种索引&#xff0c;很方便地将用户从Internet的一处带到另一处。在WWW出现之前&#xff0c;Gopher是…

【AI绘画】——Midjourney关键词格式解析(常用参数分享)

目前在AI绘画模型中&#xff0c;Midjourney的效果是公认的top级别&#xff0c;但同时也是相对较难使用的&#xff0c;对小白来说比较难上手&#xff0c;主要就在于Mj没有webui&#xff0c;不能选择参数&#xff0c;怎么找到这些隐藏参数并且触发它是用好Mj的第一步。 今天就来…

Motrix 全能型下载神器(时隔两年,重新焕发生机)

简介 Motrix 是一款功能强大的下载管理器&#xff0c;支持 HTTP、FTP、BT、磁力链等多种下载协议&#xff0c;同时还具备浏览器插件和跨平台&#xff08;Windows、macOS、Linux&#xff09;的特点。它拥有多线程下载、断点续传、任务调度、自动更新等多种实用特性&#xff0c;…

学习笔记:基于SpringBoot的牛客网社区项目实现(六)之发表帖子 + 评论 + 私信

一、过滤敏感词 二、发布帖子 业务流程&#xff1a; 1、先创建帖子的实体DiscussPost&#xff0c;属性有帖子id&#xff0c;user_id&#xff0c;title&#xff0c;content&#xff0c;type&#xff0c;status&#xff0c;create_time&#xff0c;comment_count&#xff0c;scor…