关于数组的相关知识

C语言数组基础讲解

什么是数组?

数组(Array)是相同数据类型元素的有序集合,通过一个名称来存储多个同类型数据。当我们需要处理大量相似数据时(例如:50个学生的成绩),使用数组可以避免定义大量独立变量。

数组的声明

数据类型 数组名[数组长度];

  • 示例:int scores[5]; // 声明一个存储5个整数的数组
  • 数组长度必须是整型常量
  • 数组元素在内存中连续存储

数组初始化

方式一:声明时初始化

int arr1[5] = {1, 2, 3, 4, 5};  // 完全初始化
int arr2[5] = {1, 2};           // 部分初始化,剩余元素自动补0
int arr3[] = {1, 3, 5};         // 自动确定长度为3

方式二:先声明后赋值

int arr[3];
arr[0] = 10;  // 通过下标访问元素
arr[1] = 20;
arr[2] = 30;

⚠️ 注意事项

  1. 初始值数量不能超过数组长度
  2. 数组创建后不能整体赋值

访问数组元素

  • 使用下标运算符[ ]访问元素
  • 数组下标从0开始计数
  • 有效下标范围:0数组长度-1
int numbers[4] = {8, 3, 5, 2};
printf("%d", numbers[0]);  // 输出第一个元素:8
numbers[1] = 7;           // 修改第二个元素

数组遍历

使用循环结构处理数组元素:

int main() {
    int arr[5];
    
    // 输入数组元素
    for(int i=0; i<5; i++){
        scanf("%d", &arr[i]);
    }
    
    // 输出数组元素
    for(int i=0; i<5; i++){
        printf("arr[%d] = %d\n", i, arr[i]);
    }
    
    return 0;
}

常见错误

  1. 下标越界
int arr[3] = {1,2,3};
printf("%d", arr[3]); // 错误!有效下标是0-2
  1. 错误初始化
int arr[2] = {1,2,3}; // 错误:初始值过多
  1. 错误的下标认知
int arr[5];
arr[5] = 10; // 最后一个元素应该是arr[4]

二维数组(拓展)

int matrix[3][4]; // 3行4列的二维数组
// 初始化:
int matrix[2][3] = {{1,2,3}, {4,5,6}};

数组的优势

  1. 提高数据管理效率
  2. 方便批量处理数据
  3. 为后续学习字符串、排序算法等打下基础

📝 练习建议

  1. 尝试编写程序计算数组元素之和
  2. 实现查找数组中的最大值

字符串基础

字符串的本质

在C语言中,字符串实际上是字符数组的特殊形式:

  • 使用char类型的数组存储
  • 以空字符'\0'(ASCII码0)作为结束标志
  • 需要比实际字符多1个元素的存储空间

字符串的声明与初始化

方式一:字符数组形式

char str1[6] = {'H','e','l','l','o','\0'};  // 显式包含\0
char str2[6] = "Hello";                     // 自动添加\0
char str3[] = "C Language";                  // 自动计算长度(包含\0)

方式二:字符串字面量

char str4[] = "Hello World";  // 推荐写法

字符串的输入输出

使用格式说明符%s

char name[20];
printf("请输入姓名:");
scanf("%s", name);          // 注意不需要&符号
printf("欢迎%s!", name);

特殊处理

char str[] = "Hello";
printf("%s", str);          // 输出直到遇到\0
printf("%c", str[1]);       // 输出单个字符'e'

字符串的常用操作

字符串长度(不包含\0)

int length = 0;
char str[] = "Hello";
while(str[length] != '\0') {
    length++;
}
printf("长度:%d", length);  // 输出5

字符串比较

char str1[] = "apple";
char str2[] = "apple";

int i = 0;
while(str1[i] == str2[i]) {
    if(str1[i] == '\0') {
        printf("字符串相等");
        break;
    }
    i++;
}

字符串复制

char src[] = "Hello";
char dest[6];
int i = 0;

while(src[i] != '\0') {
    dest[i] = src[i];
    i++;
}
dest[i] = '\0';  // 必须添加结束符

常见字符串函数(需包含<string.h>)

函数 功能 示例
strlen(str) 返回字符串长度 int len = strlen("abc");
strcpy(dest, src) 字符串复制 strcpy(s1, s2);
strcat(dest, src) 字符串拼接 strcat(s1, "end");
strcmp(s1, s2) 字符串比较 if(strcmp(s1, s2) == 0)

重要注意事项

  1. 数组长度必须足够
char s[5] = "hello";  // 错误!需要6个字符空间(含\0)
  1. 结束符的重要性
char s[5] = {'a','b','c'};  // 不是合法字符串(缺少\0)
printf("%s", s);            // 可能输出乱码
  1. 输入注意事项
scanf("%s", str);  // 遇到空格会停止读取
  1. 不能直接赋值
char s1[10], s2[10];
s1 = "hello";       // 错误!
s1 = s2;            // 错误!

字符串与字符数组的区别

字符数组 字符串
结束标志 不需要 必须有'\0'
输出 需要逐个字符处理 可使用%s整体输出
函数处理 需要自定义逻辑 可用字符串函数

📝 练习建议

  1. 实现字符串逆序存储
  2. 统计字符串中数字字符的数量
  3. 实现两个字符串的拼接(不使用strcat)
  4. 查找某个字符在字符串中的位置
posted @ 2025-03-13 17:56  Xhita  阅读(103)  评论(0)    收藏  举报