C语言----数组
定义数组是一组相同数据类型的元素集合这些元素在内存中是连续存储的并且通过一个唯一的数组名称和索引来访问。一、一维数组的定义语法格式数据类型 数组名[元素个数];int a[5];a[0]a[1]a[2]a[3]a[4]示例#includestdio.h int main() { int arr[]{1,2,3,4,5}; printf(%d\n,arr[0]); printf(%d\n,arr[1]); }示例结果二、数组元素的访问与操作1.声明时显示初始化在声明数组时可以显示地为每个元素赋值。int arr[5] {1,2,3,4,5};2.部分初始化在初始化的元素少于数组大小时未显示赋值的元素会被默认初始化为0。int arr[5] {1,2};3.不指定数组大小由编译器推断可以不指定数组的大小编译器会根据初始化列表自动推断数组的大小。int arr[] {1,2,3,4,5};4.使用 for 循环逐一赋值在数组声明之后可以使用 for 循环或其他方式为数组逐一赋值。int arr[5]; for (int i 0; i 5; i) { arr[i] i 1; }5.静态初始化在声明静态数组时未显式初始化的元素会自动初始化为 0。static int arr[5];6.全部初始化为 0可以通过只指定大括号而不提供具体值将数组的所有元素初始化为 0。int arr[5] {0};7.数组大小在 C 语言里数组大小 数组总字节数 / 单个元素字节数用sizeof()计算这是最标准、最安全的写法。// 计算数组元素个数长度 int len sizeof(arr) / sizeof(arr[0]);示例#include stdio.h int main() { // 定义一个整型数组 int arr[] {10, 20, 30, 40, 50}; // 计算数组大小元素个数 int len sizeof(arr) / sizeof(arr[0]); // 打印结果 printf(数组总字节数%zu\n, sizeof(arr)); printf(单个元素字节数%zu\n, sizeof(arr[0])); printf(数组元素个数长度%d\n, len); return 0; }三、使用数组的好处批量管理同类型数据连续内存访问效率高支持循环批量操作内存高效避免碎片方便函数批量传参是复杂数据结构基础四、数组在内存中的存储数组元素在内存中是连续存储的因此可以通过指针访问相邻元素。假设数组int numbers[5]存储在内存中其首元素numbers[0]的地址为numbers[0]那么numbers[1]的地址为numbers[0] 1。数组名可以直接当作指针使用通过指针访问数组元素int numbers[5] {10, 20, 30, 40, 50}; int *ptr numbers; printf(%d, *(ptr 1)); // 输出numbers[1]的值五、字符数组strcpy函数int main() { char str[20]; strcpy(str,hello);//把hello\n字符串复制给str数组 printf(%s\n,str); }sprintf()函数char str[20]; int i10; char *phello world; sprintf(str,%d,i);//把格式化内容存入到字符串str中 printf(%s\n,str);memcpy()函数char str[20]; char i[10]abcdefg; memcpy(str,i,3);//把i数组中的字符串中前3个字节复制给str数组中。六、字符串常见操作使用scanf和printf处理字符数组int main() { char name[50]; printf(请输入你的名字:); scanf(%s,name); //scanf(%[^\n],name);//遇到回车停止 fgets(name,50,stdin);//可以完整读取输入范围是50 printf(Hello,%s!\n,name);//这种情况遇见空格默认结束。 }使用标准库函数#include stdio.h #include string.h // strcat 需要这个头文件 int main() { char str[100] Hello; // 必须先初始化且空间要够大 // 拼接在 str 后面追加 World strcat(str, World); printf(%s, str); // 输出Hello World return 0; }int main() { char a[] apple; char b[] apple; char c[] banana; if (strcmp(a, b) 0) { printf(a 和 b 相等\n); // 会输出这句 } if (strcmp(a, c) 0) { printf(a 比 c 小\n); // 也会输出这句 } }七、二维数组二维数组是相同数据类型的多行多列数据的集合逻辑上可以理解为一个表格 / 矩阵由行rows和列cols组成。type array_name[rows][cols];type数组元素的类型如int、char、float等array_name数组名rows行数第一维长度cols列数第二维长度嵌套for循环二维数组#include stdio.h int main() { // 定义一个 2行3列 的二维数组 int arr[2][3] { {1, 2, 3}, // 第 0 行 {4, 5, 6} // 第 1 行 }; // 外层循环控制 行 (i 是行号) for (int i 0; i 2; i) { // 内层循环控制 列 (j 是列号) for (int j 0; j 3; j) { // 打印第 i 行第 j 列的元素 printf(%d , arr[i][j]); } // 一行打印完换行 printf(\n); } return 0; }