文章目录
一、什么是数组
int a[4];
- 在内存中分配4个int类型的内存空间,共4×4=16 个字节,并为它们起了一个名字,叫 a。
- 我们把这样的一组数据的集合称为数组(Array),它所包含的每一个数据叫做数组元素(Element),所包含的数据的个数称为数组长度(Length),例如 int a[4];就定义了一个长度为 4 的整型数组,名字是 a。
- 数组中的每个元素都有一个序号,从0开始,称为下标。使用数组元素时指明下标即可,
数组的形式为:arrayName[index]
- arrayName 为数组名称,index 为下标。例如,a[0] 表示第 0 个元素,a[3] 表示第 3 个元素。
- 下为使用循环结构将数据放入数组中(也就是为数组元素逐个赋值),然后再使用循环结构输出(也就是依次读取数组元素的值)的代码:
#include <stdio.h>
#pragma warning(disable: 4996)
int main() {
int nums[10];
int i; //从控制台读取用户输入
for (i = 0; i<10; i++) {
scanf("%d", &nums[i]); //注意取地址符 &,不要遗忘哦
}
//依次输出数组元素
for (i = 0; i<10; i++) {
printf("%d ", nums[i]);
}
return 0;
}
结果:
数组的定义方式:dataType arrayName[length]
- dataType 为数据类型,arrayName 为数组名称,length 为数组长度。
- 需要注意的是数组中每个元素的数据类型必须相同,对于 int a[4];,每个元素都必须为 int。
- 数组长度 length 最好是整数或者常量表达式,例如 10、20*4 等,这样在所有编译器下都能运行通过。
数组是一个整体,它的内存是连续的;也就是说,数组元素之间是相互挨着的,彼此之间没有一点点缝隙。
二、C语言二维数组
二维数组的定义dataType arrayName[length1][length2];
- 其中dataType 为数据类型,arrayName 为数组名,length1 为第一维下标的长度,length2 为第二维下标的长度。
- 我们可以将二维数组看做一个 Excel 表格,有行有列,length1 表示行数,length2 表示列数,要在二维数组中定位某个元素,必须同时指明行和列。例如
int a[3][4];
- 定义了一个3行4列的二维数组,共有 3×4=12 个元素,数组名为 a
- 如果想表示第 2 行第 1 列的元素,应该写作 a[2][1]。
- 在 C 语言中,二维数组是按行排列的。也就是先存放 a[0] 行,再存放 a[1] 行,最后存放 a[2] 行;每行中的 4 个元素也是依次存放。数组 a 为 int 类型,每个元素占用 4 个字节,整个数组共占用 4×(3×4)=48 个字节。
二维数组的初始化(赋值)
- 二维数组的初始化可以按行分段赋值,也可按行连续赋值。
例如,对于数组 a[5][3],
- 按行分段赋值应该写作:
int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };- 按行连续赋值应该写作:
int a[5][3]={80, 75, 92, 61, 65, 71, 59, 63, 70, 85, 87, 90, 76, 77, 85};
- 对于二维数组的初始化还要注意以下几点:
- 可以只对部分元素赋值,未赋值的元素自动取“零”值。
- 如果对全部元素赋值,那么第一维的长度可以不给出。
- 二维数组可以看作是由一维数组嵌套而成的;如果一个数组的每个元素又是一个数组,那么它就是二维数组。当然,前提是各个元素的类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组,C 语言允许这种分解。
三、C语言字符数组和字符串
字符数组
- 用来存放字符
- 实际上是一系列字符的集合,也就是字符串。
- 在C语言中,没有专门的字符串变量,没有string类型,通常就用一个字符数组来存放一个字符串。
- C 语言规定,可以将字符串直接赋值给字符数组。例如:
char str[30] = { "c.biancheng.net" };
char str[30] = "c.biancheng.net"; //这种形式更加简洁,实际开发中常用
- 但是需要留意一个坑,字符数组只有在定义时才能将整个字符串一次性地赋值给它,一旦定义完了,就只能一个字符一个字符地赋值了。
字符串结束标志
- 在 C 语言中,字符串总是以’\0’作为结尾,所以’\0’也被称为字符串结束标志,或者字符串结束符。
- 由" "包围的字符串会自动在末尾添加’\0’。
- 当用字符数组存储字符串时,要特别注意’\0’,要为’\0’留个位置;这意味着,字符数组的长度至少要比字符串的长度大 1。例如:
char str[7] = "abc123";
- "abc123"看起来只包含了 6 个字符,我们却将 str 的长度定义为 7,就是为了能够容纳最后的’\0’。如果将 str 的长度定义为 6,它就无法容纳’\0’了。
字符串长度
- 所谓字符串长度,就是字符串包含了多少个字符(不包括最后的结束符’\0’)。
- 在 C 语言中,我们使用 string.h 头文件中的 strlen() 函数来求字符串的长度,它的用法为:
length strlen(strname);
strname 是字符串的名字,或者字符数组的名字;length 是使用 strlen() 后得到的字符串长度,是一个整数。
四、C语言字符串处理函数
字符串连接函数strcat()
strcat是string catenate的缩写,意思是把两个字符串拼接在一起,语法格式为:
strcat(arrayName1, arrayName2);
- arrayName1、arrayName2 为需要拼接的字符串。
- strcat() 将把 arrayName2 连接到 arrayName1 后面,并删除原来 arrayName1 最后的结束标志’\0’。
- 这意味着,arrayName1 必须足够长,要能够同时容纳 arrayName1 和 arrayName2,否则会越界(超出范围)。
- strcat() 的返回值为 arrayName1 的地址。
字符串复制函数strcpy()
strcpy 是 string copy 的缩写,意思是字符串复制,也即将字符串从一个地方复制到另外一个地方,语法格式为:
strcpy(arrayName1, arrayName2);
- strcpy() 会把 arrayName2 中的字符串拷贝到 arrayName1 中,字符串结束标志’\0’也一同拷贝。
- strcpy() 要求 arrayName1 要有足够的长度,否则不能全部装入所拷贝的字符串。
字符串比较函数strcmp()
strcmp 是 string compare 的缩写,意思是字符串比较,语法格式为:
strcmp(arrayName1, arrayName2);
- arrayName1 和 arrayName2 是需要比较的两个字符串。
- 字符本身没有大小之分,strcmp() 以各个字符对应的 ASCII 码值进行比较。strcmp() 从两个字符串的第 0 个字符开始比较,如果它们相等,就继续比较下一个字符,直到遇见不同的字符,或者到字符串的末尾。
- 返回值:若 arrayName1 和 arrayName2 相同,则返回 0;若 arrayName1 大于arrayName2,则返回大于 0 的值;若 arrayName1 小于 arrayName2,则返回小于 0 的值。