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

这篇具有很好参考价值的文章主要介绍了【c语言】字符串的基本概念 | 字符串存储原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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


一、字符、字符数组

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);

运行结果出现了乱码:

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

原因:

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

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

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

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

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

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

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

二、字符串

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

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

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

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

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

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

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

三、字符串的存储原理

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

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

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

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

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

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

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

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

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

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

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

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

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

str1数组也在栈区 可以改变

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

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

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

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

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

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

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

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

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

大家的点赞、收藏、关注将是我更新的最大动力!欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!文章来源地址https://www.toymoban.com/news/detail-436118.html

到了这里,关于【c语言】字符串的基本概念 | 字符串存储原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 探索字符与字符串:基本库函数的使用(一)

    目录 前言 函数介绍         strlen         strcpy         strcat         strcmp         strncpy         strncat         strncmp         strstr         strtok 总结 感谢您阅读我的博客。在本期文章中,我将为您介绍一些常用的字符和字符串处理函数,并

    2024年02月16日
    浏览(36)
  • 字符串变换最小字符串(C语言)

    给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。 变换规则:交换字符串中任意两个不同位置的字符。 一串小写字母组成的字符串s 按照要求进行变换得到的最小字符串。 输入 abcdef 输出 abcdef 说明 abcdef已经是最小字符串

    2024年02月22日
    浏览(34)
  • Python 3 字符串的基本使用

    字符串是一个或多个字符(字母、数字、符号)的序列,可以是常量,也可以是变量。字符串由 Unicode 组成,是不可变的序列,这意味着它们是不变的。 由于文本是我们在日常生活中使用的一种常见数据形式,因此字符串数据类型是编程中非常重要的构建块。 本 Python 教程将

    2024年01月17日
    浏览(25)
  • c语言字符串转数字,数字转字符串

    目录 一、字符串转数字 1. 标准库转换 atoi(),字符串转换成整型数 atol(),字符串转换成长整型数 atof()字符串转换为浮点值 atoll(),字符串转换成长长整型数 strtod(),字符串转换为浮点数  strtol(),将字符串换成长整型数 二、数字转字符串 1. 通过C语言标准库函数 itoa(),整数转换成字符

    2024年02月02日
    浏览(39)
  • 【python基础】基本数据类型-字符串类型

    视频讲解: 字符串数据类型01 字符串就是一系列字符。在python中,用引号括起来文本内容的都是字符串。 其语法格式为:‘文本内容’或者“文本内容” 编写程序如下所示 我们发现其中的引号可以是单引号,也可以是双引号。这样的灵活性可以使我们进行引号之间的嵌套。

    2024年02月06日
    浏览(50)
  • C语言:字符函数和字符串函数(一篇拿捏字符串函数!)

    目录 求字符串长度: 1. strlen(字符串长度) 长度不受限制函数: 2. strcpy(字符串拷贝) 3. strcat(字符串追加) 4. strcmp(字符串比较) 长度受限制函数: 5. strncpy(字符串拷贝) 6. strncat(字符串追加) 7. strncmp(字符串比较) 字符串查找: 8. strstr(查找字符串子串) 9. strtok(字符串分割) 错误信

    2024年02月10日
    浏览(104)
  • C语言——字符串、打印字符串的三种方式

    字符串( character string )是一个或多个字符的序列,空字符( null character )\\0 标记字符串的结束 字符串以数组( array )存储,也就是以空字符(\\0)结尾的 char 类型数组 用 %s 转换说明来处理字符串的输入和输出 输入和输出必须给出字符串的首地址,可以 直接是字符串常量

    2024年02月11日
    浏览(51)
  • 【C语言小技巧】16进制字符串与字符串互转

    平时我们在写功能需求时,难免不会遇到需要将 16 进制字符串转换成字符串,或者字符串转16进制字符串的需求,所以就有了这篇文章。 在进入主题之前,我们先来回顾一下字符和 16 进制的关系。我们知道正常的 16 进制数值(像 0x32 )和 ASIIC 码( 0x32 对应字符 2 )之间是互

    2024年02月02日
    浏览(57)
  • 【Go基础】编译、变量、常量、基本数据类型、字符串

    面试题文档下链接点击这里免积分下载 go语言入门到精通点击这里免积分下载 使用 go build 1.在项目目录下执行 2.在其他路径下编译 go build ,需要再后面加上项目的路径(项目路径从GOPATH/src后开始写起,编译之后的可执行文件就保存再当前目录) 3.打包的时候自定义名字:

    2024年02月09日
    浏览(56)
  • Redis原理:动态字符串SDS

    (课程总结自b站黑马程序员课程) Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题: ①获取字符串长度的需要通过运算 ②非二进制安全:指

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包