C 语言进阶:数组在函数中的运用、二维数组及字符串处理

C 语言进阶:数组在函数中的运用、二维数组及字符串处理char word H e l l o 0 方括号中的 6 代表数组的长度 意味着这个数组能够存

大家好,欢迎来到IT知识分享网。

从不同数据类型和不同使用场景列举回顾数组定义、初始化和元素访问方式的例子。

字符数组存储英文单词

前面我们学习了 C 语言中数值数组的用法,不过在实际编程里,处理文字信息也很常见。

这时字符数组就派上用场了,它能专门用来存放文本。

下面,我们就以存储英文单词为例,讲讲字符数组该怎么用。

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

此语句定义了一个名为 word 的字符数组,该数组的长度为 6,并且对数组中的每个元素都进行了初始化操作。字符数组在 C 语言中常被用于存储字符串。
对于零基础的人而言,有可能会看不懂这一行代码的意思,接下来我就为大家详细解析一下,也是自己学习过程中顺便记一下笔记。

char word[6] = { ‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’ };

1.char

这是数据类型说明符,表明该数组的元素类型为字符类型。在 C 语言里,char 类型的变量能够存储一个字符,通常占用一个字节的内存空间。

2.word

这是数组的名称,也就是你为这个数组所取的名字。借助这个名称,你就可以在程序里对该数组进行引用和操作。

3.[6]

方括号中的 6 代表数组的长度,意味着这个数组能够存储 6 个字符元素。需要注意的是,数组的下标是从 0 开始的,所以有效的下标范围是从 0 到 5。

4.{ ‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’ }

这是初始化列表,按顺序为数组的每个元素赋予初始值。具体如下:

  • word[0] 被初始化为字符 ‘H’。
  • word[1] 被初始化为字符 ‘e’。
  • word[2] 被初始化为字符 ‘l’。
  • word[3] 被初始化为字符 ‘l’。
  • word[4] 被初始化为字符 ‘o’。
  • word[5] 被初始化为字符 ‘\0’,这是一个特殊字符,称作空字符或者字符串结束符。

在 C 语言中,字符串是以 ‘\0’ 作为结束标志的,所以当程序处理这个字符数组时,一旦遇到 ‘\0’,就会认定字符串已经结束。

这样解释是不是就很详细了,看到这里,我们可以先不看这段代码,然后自己尝试编写一下,如果实在想不起来,那么就多尝试几次,就有感觉了。

%c和%s

其中:%c和%s,应该有人会对这个问题有所疑惑,那么这个%c和%s在代码中要什么时候应用,是什么意思呢?

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

释义:

在 C 语言中,%s 和 %c 都是 printf 函数和 scanf 函数里用于格式化输入输出的占位符,不过它们的用途有所不同:

%c

%c 用于处理单个字符的输入输出。在 printf 函数中,它会输出一个字符;在 scanf 函数中,它会读取一个字符。

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

%s

%s 用于处理字符串的输入输出。在 printf 函数中,它会输出一个以 ‘\0’ 结尾的字符串;在 scanf 函数中,它会读取一个连续的非空白字符序列,直到遇到空白字符(如空格、制表符、换行符等)为止,并将其存储为一个以 ‘\0’ 结尾的字符串。

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

小贴士

  • 使用 %s 进行输入时,scanf 函数无法读取包含空格的字符串,若要读取包含空格的字符串,可以使用 fgets 函数。
  • 在使用 %s 输出字符串时,传递给 printf 函数的参数必须是一个指向以 ‘\0’ 结尾的字符数组的指针,不然可能会出现未定义行为。

浮点数数组存储商品价格

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

布尔数组标记出勤情况

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

短整型数组存储年龄

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

数组作为函数参数

调数组名作为参数时传递的是数组的首地址

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

在 C 语言里,当把数组作为参数传递给函数时,实际上传递的是数组的首地址,而非数组的副本。

这就使得在函数内部对数组元素进行修改时,会影响到原数组,下面从几个方面详细解释。

1. 数组名作为地址

在 C 语言中,数组名在大多数表达式里会被隐式转换为指向数组首元素的指针,也就是数组的首地址。

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

2. 函数参数传递数组

当把数组作为参数传递给函数时,函数接收到的是数组的首地址。

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

3. 与值传递的对比

和普通变量的值传递不同,值传递会把变量的值复制一份传递给函数,函数内部对该值的修改不会影响到原变量。

而数组传递的是地址,函数可以通过这个地址直接访问和修改原数组的元素。

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

小结:
综上所述,在函数中对数组元素的修改会影响到原数组,原因在于传递的是数组的首地址,函数可以通过该地址直接访问和修改原数组的元素。

二维数组

下面从多个方面详细解释二维数组 int matrix[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; 的定义和初始化:

1. 二维数组的定义

在 C 语言里,二维数组可看作是数组的数组,也就是每个元素都是一个一维数组。

int matrix[3][4];
  • int 表明数组元素的数据类型为整数。
  • matrix 是数组的名称,你可以借助这个名称在程序里引用该数组。
  • [3][4] 明确了数组的维度。其中第一个 3 表示二维数组有 3 行,第二个 4 表示每一行有 4 个元素。
  • 所以,这个二维数组总共包含 3 * 4 = 12 个元素。

2. 二维数组的初始化

int matrix[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
  • 外层大括号 {} 用于将整个二维数组的初始化列表括起来。
  • 内层的每个大括号 {} 代表一行元素的初始化列表。
  • 例如,{1, 2, 3, 4} 初始化了二维数组的第一行,{5, 6, 7, 8} 初始化了第二行,{9, 10, 11, 12} 初始化了第三行。
  • 每个内层大括号里的元素依次对应每一行的元素。像 1 是第一行的第一个元素,2 是第一行的第二个元素,依此类推。

3. 内存中的存储方式

二维数组在内存中是按行优先的顺序存储的,也就是先存储第一行的所有元素,接着存储第二行的元素,以此类推。

对于 matrix 数组,其在内存中的存储顺序如下:

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |

4. 访问二维数组的元素

可以使用两个下标来访问二维数组的元素,第一个下标表示行号,第二个下标表示列号。行号和列号都是从 0 开始计数的。

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

在上述代码中,matrix[0][1] 访问的是第一行(行号为 0)第二列(列号为 1)的元素,也就是 2。

5. 部分初始化

二维数组也可以进行部分初始化,未明确初始化的元素会被自动初始化为 0。

C 语言进阶:数组在函数中的运用、二维数组及字符串处理

小结:

二维数组 int matrix[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; 定义了一个 3 行 4 列的整数数组,并对数组的每个元素进行了初始化。

数组与字符串

在 C 语言中,字符串是一种特殊的数据类型,它实际上是由字符组成的数组,并且以 ‘\0’ 作为字符串的结束标志。

字符数组存储字符串

  • 字符串在 C 语言中是通过字符数组来存储的。例如,定义一个字符数组 char str[] = “Hello”;,这里的 str 就是一个字符数组,它包含了 ‘H’ ‘e’ ‘l’ ‘l’ ‘o’ 这 5 个字符,系统会自动在字符串的末尾添加一个 ‘\0’ 作为结束标志,所以实际上 str 数组占用了 6 个字节的内存空间。

‘\0’作为结束标志的作用

  • 表示字符串结束‘\0’ 是一个特殊的字符常量,其 ASCII 码值为 0。
  • 它被用作字符串的结束标志,用于告诉程序字符串在哪里结束。
  • 当程序处理字符串时,会逐个字符地读取,直到遇到 ‘\0’ 为止,这样就可以准确地确定字符串的长度和边界。
  • 区别于普通字符数组如果没有 ‘\0’ 作为结束标志,那么字符数组就只是一组字符的集合,而不是一个字符串。
  • 例如,char arr[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’}; 它只是一个普通的字符数组,没有明确的结束标志,不能直接当作字符串来处理。
  • 而 char str[] = “Hello”; 由于有 ‘\0’ 作为结束标志,它就是一个字符串,可以使用 C 语言中提供的各种字符串处理函数,如 strcpy、strcat、strcmp 等。

字符串处理函数依赖结束标志

  • C 语言标准库中的字符串处理函数都是基于 ‘\0’ 结束标志来实现的。
  • 例如,strlen 函数用于计算字符串的长度,它会从字符串的起始地址开始逐个字符地计数,直到遇到 ‘\0’ 为止,然后返回计数的结果(不包括 ‘\0’ 本身)。
  • 又如,strcpy 函数用于将一个字符串复制到另一个字符数组中,它会从源字符串的起始位置开始复制字符,直到遇到源字符串中的 ‘\0’,并将 ‘\0’ 也复制到目标字符数组中,以确保目标字符数组也是一个以 ‘\0’ 结尾的字符串。
  • 通过将字符串表示为以 ‘\0’ 结尾的字符数组,C 语言提供了一种简单而有效的方式来处理字符串数据,使得字符串的存储、操作和传递都能够方便地进行。
  • C 语言进阶:数组在函数中的运用、二维数组及字符串处理

    小练习

    C 语言进阶:数组在函数中的运用、二维数组及字符串处理

    C 语言进阶:数组在函数中的运用、二维数组及字符串处理

    C 语言进阶:数组在函数中的运用、二维数组及字符串处理

    编写一个函数,计算二维数组中所有元素的总和。输入两个字符串,比较它们的长度是否相等,如果不相等,输出较长的字符串。#在头条记录我的2025#

    以上有些知识点比较难,也是需要多理解,也就是所谓的熟能生巧吧!希望大家都能有所收获,在学习中进步,在进步中创造更多的价值!

    免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/182139.html

    (0)
    上一篇 2025-06-30 10:33
    下一篇 2025-06-30 10:45

    相关推荐

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注

    关注微信