小工具知识网

当前位置: 首页 > 行业知识 > c语言------字符串详解(非常详细)

行业知识

c语言------字符串详解(非常详细)

2026-11-08 00:24:52 来源:互联网转载

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、什么是字符串?
  • 二、在程序中定义字符串
    • 1、字符串常量(涉及一些复杂的知识)
    • 2.字符串数组和初始化
    • 3.数组和指针

      前言

          字符串是c语言中最有用、最重要的数据类型之一。我们在介绍字符串时  或多或少的会涉及指针,这是不可避免的。(实际上字符串的大多数操作都  是通过指针完成的)

      一、什么是字符串?

      字符串是一个或多个字符的序列(包括:数字、字母、空格等)如:

      “This is an array of atrings” 要注意:双引号不是字符串的一部分。双引号仅告诉编译器它括起来的是字符串。

      二、在程序中定义字符串

        在学习下面知识前我们要先知道,C语言没有专门用于存储字符串的变量类型,字符串都被存储在char类型的数组中。数组都由连续存储单元组成,字符串中的字符被存储在相邻的存储单元中,每个存储单元(一字节)存储一个字符。

      1、字符串常量(涉及一些复杂的知识)

      双引号括起来的内容称为字符串常量(C语言中不存在字符串变量)。

      双引号中的字符和编译器自动加入末尾的**\0**字符,都作为字符串存储在内存中,下面是一些例子:

      "Give me a thumbs up"//在定义字符串时编译器会自动在字符串最后加入'
      char ch1[30] = "Stick"    "to it will ""be something";printf("ch1  =  %s \n", ch1);//%s是打印字符串的格式符char ch2[30] = "Stick to it will be something";printf("ch2  =  %s \n",ch2);
      '字符在下面我们会详细讲解"Thank you for your support"//

      在定义字符串时,字符串常量见没有间隔或用空白字符分割,C语言将会把它们看作串联起来的字符串常量。示例:

      ch2

      程序运行结果:

      可以看到上述例子,在进行字符串打印操作时(printf(“ch2 = %s \n”,

      printf("%s \n", "Stick to it will be something");
      );),实际参数位置只需要给出数组名,我们知道数组名代表数组首元素地址,也就是数组开始位置,那么下面代码也可以做到相同的效果:

      printf("%p   %c\n", "Stick",*"Stick");

      这是否说明双引号中的内容也是代表首元素的地址呢?下面我们测试一下,代码如下:

        通过%p转换确实打印出了一个地址,我们通过对这个地址的解引用得到了这个字符串的首元素,证实了上面的猜想。

      代码运行结果:

      2.字符串数组和初始化

      char ch[40] = "Stick to it will be something";char ch2[] = "Stick to it will be something";//如果创建一个稍后再填充的数组,必须在声明时指定大小

      我们在定义字符串数组时,如果在程序运行前知道要存储内容,就可以开辟足够大的空间用来存储字符串,或是省略数组初始化声明中的大小(编译器会自动计算数组大小,并开辟出足够大的空间)。示例使用“Stick to it will be something”演示:

      char ch[5] = "six";//为方便展示,初始字符串较短

      值得一提的是,在开辟空间大于字符串所需空间时,空间剩余部分会被初始化为‘\0’。示例:

      可以看到下方字符串数组内存存储情况,未使用部分全部使用‘
      char ch[10] = { 'H','e','l','l','
             我们在指定数组大小时,要确保数组可存储元素个数至少比字符串长度多1(再次强调编译器编译程序时会在字符串最后添加‘

      3.数组和指针

      ’,这也是字符串结束的标志)
      ' };printf("%s ", ch);//注意这里如果没有空字符('
             在阅读这块时要注意,下面介绍的只是很浅显的知识,如果非要展开来讲,就会涉及到C语言后面的   知识(数据存储----程序的内存分配),对于刚接触的同学来说,可能会难以理解。
      ')就不是一个字符串,而是一个字符数组//字符数组不可以用上述形式输出
      ’初始化
      char ch[10] = "sihio";//数组形式char* c = "sihio";//指针形式//下面代码均以这里为例

      下面我们再来认识一种不常用的初始化方式,示例如下:

           这里就不演示了,大家可以自己试一下。
            关于字符串,还有很多知识我并没有在这里提到,C语言知识间的联系还是很强的,如果要面面俱  到,就会涉及到很多其他的知识,不利于理解。字符串在C语言中还是很重要的,下次我会给大家介绍  C语言专门为操作字符串而定义的函数。

      数组形式:

      在进行上述形式存储时,编译器会把数组名ch,当作数组首元素地址(&ch[0])的别名(就像我们给同学起外号一样),在这里我们要清楚,ch是地址常量(常量不可被修改),如果修改了ch也就意味着更改了数组存储的位置,也就是说我们在对数组进行操作时可以进行类似ch+n(n指所有小于数组范围的整数)的操作,但不允许进行类似这样的操作:++ch(大家应该知道自增运算符会改变作用对象大小)。

      指针形式:

      在程序运行时,它会为c指针变量开辟应该属于它的空间,并把字符串首字符的地址存储在这块空间中,这个指针变量的值是可以改变的,所以它可以使用自增运算的进行++c的操作。

      数组和指针的区别:

      两者的主要区别是:数组名ch是常量,而指针c是变量(这关系到他们使用时的区别)。

上一篇:宝塔面板,轻松添加PHP版本,操作指南全解析!

下一篇:揭秘远程桌面连接的源代码,深度解析其奥秘!