Skip to content

1. 一维数组

1.1 一维数组的定义和初始化

  • 定义

    • 一维数组是一组相同类型的元素的集合,这些元素在内存中是连续存储的。
  • 语法

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

  • 初始化

    • 可以在定义时初始化数组。

    • 也可以先定义后初始化。

  • 示例 int ages[3] = {1, 3, 5}; // 定义并初始化  int ages[3]; // 先定义  ages[0] = 1; // 后初始化  ages[1] = 3;  ages[2] = 5;

1.2 一维数组的遍历

  • 遍历

    • 遍历的意思就是有序地查看数组的每一个元素。
  • 示例

    int ages[4] = {1, 3, 5, 7};
     for (int i = 0; i < 4; i++) {
         printf("ages[%d] = %d\n", i, ages[i]);
     }

    • 输出:

      ages[0] = 1
       ages[1] = 3
       ages[2] = 5
       ages[3] = 7

1.3 输入 5 个数,求和以及最值

  • 示例
    cpp

#include <stdio.h>
 ​
 int main() {
     int nums[5];
     int sum = 0;
     int max = nums[0];
     int min = nums[0];
 ​
     printf("请输入 5 个整数:\n");
     for (int i = 0; i < 5; i++) {
         scanf("%d", &nums[i]);
         sum += nums[i];
         if (i == 0) {
             max = nums[i];
             min = nums[i];
        } else {
             if (nums[i] > max) {
                 max = nums[i];
            }
             if (nums[i] < min) {
                 min = nums[i];
            }
        }
    }
 ​
     printf("总和: %d\n", sum);
     printf("最大值: %d\n", max);
     printf("最小值: %d\n", min);
 ​
     return 0;
 } ```


2. 二维数组

2.1 二维数组的定义和初始化

  • 定义

    • 二维数组是一个数组的数组,每个元素也是一个数组。
  • 语法

    数据类型 数组名[行数][列数];

  • 初始化

    • 可以在定义时完全初始化。

    • 也可以部分初始化。

    • 可以省略第一维的长度,但不能省略第二维的长度。

  • 示例

    cpp
    int a[2][3] = {{80, 75, 92}, {61, 65, 71}}; // 完全初始化  
     int a[2][3]; // 先定义  
     a[0][0] = 80;  
     a[0][1] = 75;  
     a[0][2] = 92;  
     a[1][0] = 61;  
     a[1][1] = 65;  
     a[1][2] = 71; // 后初始化  
     ​  
     int a[2][3] = {80, 75, 92, 61, 65, 71}; // 按行连续赋值  
     int a[][3] = {{1, 2, 3}, {4, 5, 6}}; // 省略第一维的长度  
     int a[][3] = {1, 2, 3, 4, 5, 6}; // 省略第一维的长度
     
    

#### **2.2 二维数组的访问**

- **通过下标(索引)访问**:
    
    - 使用 `数组名[行下标][列下标]` 的方式访问二维数组中的元素。
        
- **示例**:
    ```cpp
    int ages[2][3] = {1, 2, 3, 4, 5, 6};  
     printf("ages[0][2] = %d\n", ages[0][2]); // 输出 3  
     ages[1][1] = 10;  
     printf("ages[1][1] = %d\n", ages[1][1]); // 输出 10
 

2.3 二维数组的遍历

  • 遍历

    • 二维数组可以分解为多个一维数组,每个一维数组都有固定数量的元素。

    • 例如,二维数组 a[3][4] 可以分解为三个一维数组 a[0], a[1], a[2],每个一维数组都有 4 个元素。

  • 示例

    cpp
    nt a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};  
     for (int i = 0; i < 3; i++) {  
         for (int j = 0; j < 4; j++) {  
             printf("a[%d][%d] = %d\n", i, j, a[i][j]);  
         }  
     }
    
    //输出:
        
         a[0][0] = 1  
         a[0][1] = 2  
         a[0][2] = 3  
         a[0][3] = 4  
         a[1][0] = 5  
         a[1][1] = 6  
         a[1][2] = 7  
         a[1][3] = 8  
         a[2][0] = 9  
         a[2][1] = 10  
         a[2][2] = 11  
         a[2][3] = 12
     i
        

---

### **3. 二维数组的特殊情况**

- **省略行数**:
    
    - 可以省略第一维的长度,但不能省略第二维的长度。
        
    - 示例:
        
         int a[][3] = {{1, 2, 3}, {4, 5, 6}}; // 正确  
         int a[2][] = {1, 2, 3, 4, 5, 6}; // 错误
        
    - 解释:
        
        - 如果省略了第一维的长度,编译器会根据初始化的数据自动计算出第一维的长度。
            
        - 如果省略了第二维的长度,编译器无法确定每行有多少个元素,因此会导致错误。
            

---

### **4. 示例代码解析**

- **示例代码**:
    ```cpp
 map[cur_row - 1][cur_col] = 'O';  
     map[cur_row][cur_col] = ' ';  
     cur_row--;
- 这段代码的作用是将当前行的前一行的某个位置设置为 `'O'`,并将当前行的该位置设置为空格 `' '`,然后将当前行减 1。
    
- 类似的代码还有:
    ```cpp
     case 's':  
         if (cur_row + 1 < 6) {  
             if (map[cur_row + 1][cur_col] == ' ') {  
                 map[cur_row + 1][cur_col] = 'O';  
                 map[cur_row][cur_col] = ' ';  
                 cur_row++;  
             }  
         } else {  
             printf("成功出去\n");  
             success = 1;  
             return 0;  
         }  
         break;  
     case 'a':  
         if (cur_col - 1 >= 0) {  
             if (map[cur_row][cur_col - 1] == ' ') {  
                 map[cur_row][cur_col - 1] = 'O';  
                 map[cur_row][cur_col] = ' ';  
                 cur_col--;  
             }  
         } else {  
             printf("成功出去\n");  
             success = 1;  
             return 0;  
         }  
         break;
        
        
    - 这些代码用于在一个二维数组 `map` 中移动一个标记 `'O'`,并处理边界情况。
        

---

### **总结**

1. **一维数组**:
    
    - 定义和初始化:`数据类型 数组名[数组长度]`。
        
    - 遍历:使用 `for` 循环。
        
    - 示例:输入 5 个数,求和及最值。
        
2. **二维数组**:
    
    - 定义和初始化:`数据类型 数组名[行数][列数]`。
        
    - 访问:`数组名[行下标][列下标]`。
        
    - 遍历:使用嵌套的 `for` 循环。
        
    - 特殊情况:可以省略第一维的长度,但不能省略第二维的长度。
        
3. **示例代码**:
    
    - 解析了如何在二维数组中移动标记,并处理边界情况。

知识如风,常伴吾身