C语言学习笔记四(一维数组)

一、数组的概念

数组是一种线性数据结构,它是由相同类型的数据元素组成的集合。在C语言中,数组是一种基本的数据结构,用于存储一组具有相同数据类型的数据元素。数组中的每个元素可以通过索引(下标)来访问,索引从0开始。

二、一维数组的定义

一维数组是最简单的数组形式,它只有一行数据。定义一维数组的基本语法如下:


数据类型 数组名[数组长度];
  • 数据类型:可以是任意基本数据类型,如intfloatchar等。

  • 数组名:用户自定义的数组名称,遵循C语言标识符的命名规则。

  • 数组长度:表示数组中可以存储的元素个数,必须是一个正整数。

    int arr[5]; // 定义一个包含5个整数的数组
    float scores[10]; // 定义一个包含10个浮点数的数组
    char letters[26]; // 定义一个包含26个字符的数组

    三、数组的初始化

    数组可以在定义时进行初始化,也可以在定义后单独赋值。初始化的方法有以下几种:

    1. 完全初始化

    在定义数组时直接给每个元素赋初值,数组长度可以省略,编译器会根据初值的个数自动确定数组长度。

    int arr[] = {1, 2, 3, 4, 5}; // 定义并初始化一个整型数组
    float scores[] = {90.5, 85.0, 78.3}; // 定义并初始化一个浮点型数组
    char letters[] = {'a', 'b', 'c', 'd'}; // 定义并初始化一个字符数组

    如果数组长度和初值个数不一致,编译器会根据初值个数调整数组长度。

    2. 部分初始化

    只给数组的前几个元素赋初值,其余元素会被自动初始化为0(对于数值型数组)或空字符(对于字符数组)。

    int arr[5] = {1, 2}; // 前两个元素初始化为1和2,其余元素为0
    char letters[5] = {'a', 'b'}; // 前两个元素初始化为'a'和'b',其余元素为'\0'

    3. 字符数组的特殊初始化

    字符数组可以用来存储字符串,字符串以空字符\0结尾。在初始化字符数组时,可以直接用字符串字面量。

    char str[] = "Hello"; // 定义并初始化一个字符数组,存储字符串"Hello"

    在这种情况下,数组长度会自动加上一个空字符\0的位置,例如上面的数组长度为6。

    四、数组元素的访问

    数组元素可以通过数组名和索引(下标)来访问。索引从0开始,最大索引值为数组长度减1。访问数组元素的语法为:

    数组名[索引]

    例如:

    int arr[5] = {1, 2, 3, 4, 5};
    printf("%d\n", arr[0]); // 输出数组的第一个元素,结果为1
    arr[2] = 10; // 将数组的第三个元素修改为10

    需要注意的是,如果访问数组的越界元素(索引超出范围),可能会导致程序运行错误或不可预测的行为。

    五、数组的遍历

    遍历数组是指依次访问数组中的每个元素。通常使用循环语句来实现数组的遍历。以下是一个使用for循环遍历数组的示例:

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

    输出结果为:

    1 2 3 4 5

    六、数组作为函数参数

    数组可以作为函数的参数传递。在传递数组时,通常传递的是数组的首地址(即数组名)。函数可以通过指针来访问和修改数组中的元素。

    1. 传递数组到函数

    当数组作为函数参数时,函数原型和函数调用中只需要指定数组名,不需要指定数组长度。

    void printArray(int arr[], int size) {
        for (int i = 0; i < size; i++) {
            printf("%d ", arr[i]);
        }
        printf("\n");
    }
    
    int main() {
        int arr[5] = {1, 2, 3, 4, 5};
        printArray(arr, 5);
        return 0;
    }

    2. 修改数组元素

    在函数中可以通过指针修改数组元素,这些修改会反映到原始数组中。

    void incrementArray(int arr[], int size) {
        for (int i = 0; i < size; i++) {
            arr[i]++;
        }
    }
    
    int main() {
        int arr[5] = {1, 2, 3, 4, 5};
        incrementArray(arr, 5);
        for (int i = 0; i < 5; i++) {
            printf("%d ", arr[i]);
        }
        printf("\n");
        return 0;
    }

    输出结果为:

    2 3 4 5 6

    七、数组的内存分配

    在C语言中,数组的内存分配是在栈上完成的,数组的大小必须在编译时确定。数组的内存是连续的,数组名代表数组的首地址。

    八、数组的应用示例

    数组在C语言中应用广泛,以下是一些常见的应用场景:

    1. 存储和处理一组数据

    例如,存储学生的成绩、温度记录等。

    float temperatures[7] = {23.5, 24.0, 25.5, 26.0, 27.5, 28.0, 29.5};
    float sum = 0;
    for (int i = 0; i < 7; i++) {
        sum += temperatures[i];
    }
    float average = sum / 7;
    printf("Average temperature: %.2f\n", average);

    2. 实现简单的数据结构

    例如,用数组实现栈、队列等数据结构。

    3. 字符串处理

    字符数组常用于存储和处理字符串。

    char str[20] = "Hello, World!";
    printf("String: %s\n", str);

    九、注意

  • 数组长度必须为正整数:数组长度不能为负数或零。

  • 数组索引从0开始:访问数组元素时,索引范围为0数组长度 - 1

  • 数组内存连续:数组的内存是连续分配的,数组名代表数组的首地址。

  • 数组初始化:未初始化的数组元素可能包含垃圾值,建议在定义时初始化。

  • 数组作为函数参数:传递数组时传递的是数组的首地址,函数可以通过指针修改数组元素。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值