大家好,欢迎来到IT知识分享网。
从不同数据类型和不同使用场景列举回顾数组定义、初始化和元素访问方式的例子。
字符数组存储英文单词
前面我们学习了 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 语言中,%s 和 %c 都是 printf 函数和 scanf 函数里用于格式化输入输出的占位符,不过它们的用途有所不同:
%c
%c 用于处理单个字符的输入输出。在 printf 函数中,它会输出一个字符;在 scanf 函数中,它会读取一个字符。


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

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


布尔数组标记出勤情况


短整型数组存储年龄


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

在 C 语言里,当把数组作为参数传递给函数时,实际上传递的是数组的首地址,而非数组的副本。
这就使得在函数内部对数组元素进行修改时,会影响到原数组,下面从几个方面详细解释。
1. 数组名作为地址
在 C 语言中,数组名在大多数表达式里会被隐式转换为指向数组首元素的指针,也就是数组的首地址。

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




3. 与值传递的对比
和普通变量的值传递不同,值传递会把变量的值复制一份传递给函数,函数内部对该值的修改不会影响到原变量。
而数组传递的是地址,函数可以通过这个地址直接访问和修改原数组的元素。


小结:
综上所述,在函数中对数组元素的修改会影响到原数组,原因在于传递的是数组的首地址,函数可以通过该地址直接访问和修改原数组的元素。
二维数组
下面从多个方面详细解释二维数组 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 开始计数的。


在上述代码中,matrix[0][1] 访问的是第一行(行号为 0)第二列(列号为 1)的元素,也就是 2。
5. 部分初始化
二维数组也可以进行部分初始化,未明确初始化的元素会被自动初始化为 0。

小结:
二维数组 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’ 结尾的字符串。

小练习



编写一个函数,计算二维数组中所有元素的总和。输入两个字符串,比较它们的长度是否相等,如果不相等,输出较长的字符串。#在头条记录我的2025#
以上有些知识点比较难,也是需要多理解,也就是所谓的熟能生巧吧!希望大家都能有所收获,在学习中进步,在进步中创造更多的价值!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/182139.html