【C语言更新】字符串与指针 2024-07-30 02:45:11 文/Edward 之前我们说过关于字符的一些内容,字符的原理,归根到底就是将我们常用的一些字符根据编号整理成一张统一的表,每个字符对应着这个表里面的一个数值,这一过程就是字符的编码。然而大多数时候我们根本就不会使用单个字符,比如计算机上面要输出一句句子“Helloworld”,这个句子里面就是由多个字符所组成的,分别是“H”,“e”,“l”,“l”,“o”,“(空格也是字符)”,“w”,“o”,“r”,“l”,“d”,这种有多个字符组成的句子,在C语言中被称为“字符串”。了解完字符串是由多个字符组成的之后,想要存储字符串就变得非常容易了,我们只需要定义多个变量来存储这些字符就可以了,如要输出“Hello”,我们只需要定义五个字符型变量来存储这些字符,然后就可以做一些处理。如,打印出“Hello”,如图1所示。图1 字符连接成字符串这样就可以打印出一个“Hello”的句子出来了,但是,这种分散式字符组成字符串的方式在做字符串处理的时候,非常吃力,最好的方式就是可以将这些字符存储到一个集群式的变量里面,我们C语言中集群式的存储类型只有数组一种类型,因此上面的程序中的五个变量可以改造成一个数组,这个数组定义好之后就可以用来存放这些字符了。改造完成的程序如图2所示。图2 数组存放字符上面的字符串中字符是被一个一个存入数组中的,这种方式显得有些繁琐,特别是操作字符串的时候,还需要使用for语句进行循环操作,这样在使用字符串的时候,操作的时候太过于麻烦。我们还可以再改造一下上面的程序。在C语言中,定义用双引号“”””包住的一句句字有一个特殊的称呼,它就叫字符串。同时在C语言中使用“printf”函数的时候,还有特殊适配符去适配这种数据类型。对图6-5-2中的程序改造如图6-5-3所示。图6-5-3字符串赋值给数组上面的程序中,我仔细看可以发现,打印输出的结果有些不正常,就是在Hello打印完成之后有多输出了一个“?”。这是程序的一个小Bug,出现的原因是,当我们使用字符串去赋值给一个数组的时候,除了这个字符串正常的字符之外,在最后一个字符结束之后,字符串会额外增加一个’\0’字符,这个’\0’字符就是字符串结束的一个标志性字符,没有实际意义,而当我们给一个长度为5的数组中存入“Hello”字符串时,实际上是会存入6个字符,而用printf函数的%s适配时,由于检测不到’\0’字符,所以函数不会停地打印字符,直到遇到‘\0’。修改的方式很简单,只需要将字符的长度增加一个即可,如图6-5-4所示。图6-5-4 字符串赋值给数组,数组长度需要增加虽然程序中的问题解决了,但是这种方法是不是意味着每次给数组赋值字符串的时候,都需要去数这个字符串里面有多少个字符,然后加1,再去定义一个数组呢?显然不是,如果真要这样的话,那么C语言可能早就被淘汰了。其实在给一个数组初始化赋值一个字符串的时候,我们根本就不需要去显示地指出这个字符串的长度,如图6-5-5所示。图6-5-5 字符串赋值给数组,数组长度需要指明说到这里,我们其实就可以明白,字符串的本质其实就是字符型数组,因此当我们使用指针操作的时候,也只需要像操作数组一样去操作字符串即可。基于上面的程序,我们可以定义一个字符型指针去指向一个字符串,这样,这个字符串指针具有这个数组的特性。如图6-5-6所示。图6-5-6指向字符串的指针以上就是关于指向字符串指针的定义,指针在平时使用中有很多情况都是来处理一些字符串数据的,我们在后面的章节会继续讨论这个问题。 赞 (0) 相关推荐 关于c语言的知识点不足的地方 在最近的一次c语言考试之前,查找资料做题总结 关于代码的自动对齐,dev c++ CTRL+shift+A/a 关于运算顺序的csdn上有,常考的有/ %等 上地址 https://blog.csdn ... 带你了解c++和c中字符串的使用 -----对于c语言当中,你好像没有看到有关于字符串定义的关键字,不像我们常规的整型.浮点型.字符类型.指针.数组.结构体等数据类型,都能够一眼就能看出他们是什么数据类型,但是如果你对c语言理解不是很 ... 【C语言更新】指向函数的指针 文/Edward 定义一个指向函数的指针 前面我们说了,指针的本质其实就是用来存放地址的变量,将一个对象的地址赋值给指针的过程被称为指向.我们前面已经讲过了指针指向变量,指针指向数组,指针指向字符 ... 【C语言更新】指针函数 文/Edward 今天开始,我们将来介绍C语言里面最让人头痛的两个东西,指针函数和指向函数的指针. 指针函数这个名字乍一看非常唬人,又是指针又是函数的,但是其实它并没有想象的那么复杂,千万别被它的名字 ... 【C语言更新】C语言中字符串的操作 文/Edward 在C语言的实际使用中,很多时候会去使用指针传递一些字符串,而C语言中也有很多关于字符串处理的库函数给大家来使用,只要在使用的时候包含头文件"string.h"就可 ... 【C语言更新】指向数组的指针 文/Edward 前面我们在讲述数组的时候曾经说过,对于数组内部元素的引用方式主要有两种,一种就是使用方括号"[ ]"的下标索引,另一种就是之前提到过,但是没有细致讲述的指针引用. ... 【C语言更新】指针变量的基本使用使用 文/Edward 当我们将一个指针变量定义好之后,接下来需要考虑的问题就是如何来使用这个指针变量了.前面学习普通变量的时候,我们知道,一个变量的操作其实就是分成读和写两个步骤.而指针变量在平时使用的时 ... 【C语言更新】C语言中如何来定义一个指针,并且对其进行初始化 文/Edward 再来说下函数参数传递的问题.在C语言中,每个变量被定义好之后(Auto类型定义),编译器便会在内存的栈区为它们开辟出来内存空间来存放这些变量.这些内存空间不管是连续的还是断续的,它们 ... 如果说C语言的灵魂在于指针,那么单片机的灵魂在于什么(以51单片机为例)? 单片机的"灵魂"-数据存储器 可以说程序存储器的里面存放的是单片机的灵魂,它就是工作程序.小的可能只有1KB(最多只能装1024条8位数据,因为实际指令还有许多2字节.3字节指令, ... 如果说C语言的灵魂在于指针那么单片机的灵魂在于什么以51单片机为例 (用编程器这个特殊工具把调试成功的机器码装载进去) (https://m.toutiao.com/is/e8BboLk/ ) https://m.toutiao.com/is/e8BboLk/ 单片机 ... 【C语言更新】条件编译 文/Edward 有时候我们在做项目的时候,一个全新的项目代码并不会全部重新写,这个新项目往往只是某一个主线项目的分支,因此可以借鉴之前的代码,然后对需要修改的地方进行修改.但是,如果这两份代码改动的 ...