第 10 节:数组(一)

120 阅读6分钟

数组(一)

本节内容要点:

  • 数组简介
  • for 循环中使用数组
  • 如何创建并初始化数组
  • 编写处理数组的函数
  • 二维数组

10.1 数组

C 语言中,一组数据的集合称为数组(C Primer Plus中:数组[array是按照顺序存储的一系列类型相同的值)] Array ,比如:字符串 char ,实际上也算是数组,字符串由多个字符构成;

数组中的每一个数据叫做数组元素 Element,数组中的每个元素都有一个序号,这个序号从 0 开始,称为下标 Index,例如,a[0] 表示第0个元素,a[3] 表示第3个元素。数组是一个整体,它的内存是连续的:

  • 字符数组和字符串的内存示意图

10.1.1 定义数组并初始化

定义数组 要想把数据放入内存,必须先要分配内存空间。例如:放入 4 个整数,就得分配 4 个 int 类型的内存空间:

//整形数组
int a[4] = {1,2,3,4};   //数组长度为4,只能存放4个元素
//浮点数数组
float a[4] = {1.0,2.0,3.0,4.0};   //数组长度为4,只能存放4个元素
//浮点数数组
double a[4] = {1.0,2.0,3.0,4.0};   //数组长度为4,只能存放4个元素
//字符串
char a[4] = "1234";     //数组长度为4,只能存放4个元素
  • 注意

1.数组中每个元素的数据类型必须相同,例如:int a[4],每个元素都必须为 int ;
2.数组长度 length 最好是整数或者常量表达式;
3.访问数组元素时,下标的取值范围为 0≤ index < length;
4.数组是一个整体,它的内存是连续的,内存示意图:

10.1.2 初始化数组

1. 定义数组同时赋值

整形数组

int a[4] = {1,2,3,4};

浮点数数组

float a[4] = {1.0,2.0,3.0,4.0};

双精度浮点数数组

double a[4] = {1.0,2.0,3.0,4.0};

字符串

char a[5] = "1234";

2. 根据数组下标对数组元素赋值

a[4];
a[0]=20;
a[1]=345;
a[2]=700;
a[3]=22;

等价于:

a[4] = {20,345,700,22};

3. 只给部分元素赋初值

// 案例一
int a[10]={121922 , 993344};

等价于:

int a[10]={121922 , 99334400000};

4. 将数组所有元素初始化为0

int a[10]={0};

等价于:

int a[10]={000 , 0000000};

注意:

int a[10]={1};

等价于:

int a[10]={100 , 0000000};

若要所有元素为1:

int a[10]={111 , 1111111};

5. 给全部元素赋值且不指定数组长度

int a[]={0,2,4,6,8};

等价于:

int a[5]={0,2,4,6,8};

10.1.3 访问数组

数组元素通过下标访问,例如:

#include <stdlib.h>
#include <stdio.h>

void main()
{
    int a[10] = { 121922 , 993344 };
    printf("index:%d  value:%d\n"0, a[0]);
    printf("index:%d  value:%d\n"2, a[2]);
    printf("index:%d  value:%d\n"4, a[4]);
    printf("index:%d  value:%d\n"8, a[8]);
    system("pause");
}

10.1.4 修改数组

可通过下标修改数组元素,例如:

#include <stdio.h>

int main()
{
    int a[5]={121922 , 993344};
    printf("index:%d  value:%d\n",0,a[0]);
    printf("index:%d  value:%d\n",1,a[1]);
    printf("index:%d  value:%d\n",2,a[2]);
    printf("index:%d  value:%d\n",3,a[3]);
    printf("index:%d  value:%d\n",4,a[4]);

    printf("-------------------------------------------\n");

    // 修改数组的值
    a[0] = 100;
    a[1] = 200;
    a[2] = 300;
    a[3] = 400;
    a[4] = 500;

    printf("index:%d  value:%d\n",0,a[0]);
    printf("index:%d  value:%d\n",1,a[1]);
    printf("index:%d  value:%d\n",2,a[2]);
    printf("index:%d  value:%d\n",3,a[3]);
    printf("index:%d  value:%d\n",4,a[4]);
}

10.2 在for循环中使用数组

#include <stdio.h>

int main() {
    int arr[] = {12345}; // 定义一个整型数组
    int len = sizeof(arr) / sizeof(arr[0]); // 计算数组长度

    for (int i = 0; i < len; i++) {
        printf("数组元素[%d]的值为:%d
", i, arr[i]);
    }

    return 0;
}

补充其它两种语言的写法:

  • 使用Python`进行遍历数组
# 一维数组(列表)
arr = [12345]
for item in arr:
    print(item)

# 也可以使用索引
for i in range(len(arr)):
    print(arr[i])

# 二维数组(列表)
arr2 = [[123], [456]]
for row in arr2:
    for elem in row:
        print(elem, end=' ')
    print()  # 换行
  • 使用Java进行遍历数组
// 一维数组
int[] arr = {12345};
for (int i : arr) {
    // 使用增强型for循环遍历
    System.out.print(i + " ");
}

// 也可以使用传统索引方式
for (int i = 0; i < arr.length; i++) {
    System.out.print(arr[i] + " ");
}

// 二维数组
int[][] arr2 = {{123}, {456}};
for (int i = 0; i < arr2.length; i++) {
    for (int j = 0; j < arr2[i].length; j++) {
        System.out.print(arr2[i][j] + " ");
    }
    System.out.println(); // 换行
}

在C语言中,使用for循环遍历数组的方法如下:

  • 首先,确定数组的长度,即元素个数。
  • 使用for循环,从0开始遍历到数组长度减1。
  • 在循环体内,通过下标访问数组元素并进行相应的操作。

10.2.1 数组遍历原理

C / C++ 数组定义和初始化中详细的介绍了关于数组五种初始化方法,这些初始化方式其实在开发中还是蛮实用的;

对于数组元素的访问和修改是通过数组下标的方式来解决的,数组遍历的原理也是一样,通过 while 循环或者 for 循环直接遍历数组下标从而达到访问或者修改数组值的目的;

📕需要注意的是:

1.数组中每个元素的数据类型必须相同,例如:int a[4],每个元素都必须为 int;

2.数组长度 length 最好是整数或者常量表达式;

3.访问数组元素时,下标的取值范围为 0 ≤ index < length;

4.数组是一个整体,它的内存是连续的;

10.2.2 数组遍历实战

1.遍历数组查询数组中的元素

#include <stdio.h>

int main() {
    int arr[] = {12345}; // 定义一个整型数组
    int target = 3// 要查找的目标元素
    int count = sizeof(arr) / sizeof(arr[0]); // 计算数组长度

    for (int i = 0; i < count; i++) {
        if (arr[i] == target) {
            printf("找到目标元素:%d
", target);
            break;
        }
    }

    if (target != 3) {
        printf("未找到目标元素");
    }

    return 0;
}

2.遍历数组修改数组中的元素

  • 确定数组长度:需要知道数组的长度,即元素的个数。这可以通过sizeof(arr)/sizeof(arr[0])来计算得到,其中arr是数组名。
  • 选择合适的循环结构:可以使用for循环、while循环或do-while循环来遍历数组。
  • 编写循环体:在循环体内,通过数组下标访问每个元素,并进行相应的操作。例如,可以对数组元素进行加法、减法、乘法等运算,或者将数组元素替换为新的值。
  • 处理修改后的结果:如果需要输出修改后的数组,可以在循环结束后再次遍历数组并打印出每个元素的值。
#include <stdio.h>

int main() {
    int arr[] = {12345}; // 定义一个整型数组
    int count = sizeof(arr) / sizeof(arr[0]); // 计算数组长度

    for (int i = 0; i < count; i++) {
        arr[i] = arr[i] * 2// 将数组元素乘以2
    }

    // 输出修改后的数组
    for (int i = 0; i < count; i++) {
        printf("数组元素[%d]的值为:%d
", i, arr[i]);
    }

    return 0;
}