当前位置: 首页 > news >正文

C语言数组

在C语言中,数组是一种非常重要且基础的数据结构,它允许你存储多个相同类型的元素。下面从数组的定义、初始化、访问、多维数组、数组与指针的关系等方面详细介绍C语言数组。

1. 数组的定义

数组是一组具有相同数据类型的元素的集合,这些元素在内存中是连续存储的。数组定义的一般形式如下:

数据类型 数组名[数组大小];
  • 数据类型:指定数组中每个元素的数据类型,如intfloatchar等。
  • 数组名:是数组的标识符,用于引用数组。
  • 数组大小:指定数组中元素的个数,必须是一个常量表达式。

示例:

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

2. 数组的初始化

数组可以在定义时进行初始化,也可以在后续的代码中进行赋值。

2.1 定义时初始化
// 初始化包含5个整数的数组
int numbers[5] = {1, 2, 3, 4, 5};

// 初始化时可以省略数组大小,编译器会根据初始化列表的元素个数自动确定数组大小
int numbers2[] = {10, 20, 30, 40, 50};

// 部分初始化,未初始化的元素会被自动初始化为0
int numbers3[5] = {1, 2};  // numbers3数组元素为 {1, 2, 0, 0, 0}
2.2 后续赋值
int numbers[5];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;

3. 数组的访问

数组元素可以通过下标来访问,数组的下标从0开始,最大下标为数组大小减1。访问数组元素的一般形式如下:

数组名[下标];

示例:

#include <stdio.h>

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};
    // 访问数组的第一个元素
    printf("数组的第一个元素: %d\n", numbers[0]);
    // 修改数组的第三个元素
    numbers[2] = 10;
    printf("修改后的数组第三个元素: %d\n", numbers[2]);
    return 0;
}

4. 多维数组

C语言支持多维数组,最常见的是二维数组。二维数组可以看作是一个表格,有行和列。

4.1 二维数组的定义
数据类型 数组名[行数][列数];

示例:

int matrix[3][4];  // 定义一个3行4列的二维数组
4.2 二维数组的初始化
// 初始化3行4列的二维数组
int matrix[3][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

// 部分初始化
int matrix2[3][4] = {
    {1, 2},
    {5},
    {9, 10, 11}
};
4.3 二维数组的访问
#include <stdio.h>

int main() {
    int matrix[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };
    // 访问第二行第三列的元素
    printf("第二行第三列的元素: %d\n", matrix[1][2]);
    return 0;
}

5. 数组与指针的关系

在C语言中,数组名在大多数情况下会被隐式转换为指向数组第一个元素的指针。

#include <stdio.h>

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};
    // 数组名numbers被隐式转换为指向数组第一个元素的指针
    int *ptr = numbers;
    // 通过指针访问数组元素
    printf("数组的第一个元素: %d\n", *ptr);
    printf("数组的第二个元素: %d\n", *(ptr + 1));
    return 0;
}

6. 数组作为函数参数

数组可以作为函数的参数传递,在函数中可以对数组元素进行操作。

#include <stdio.h>

// 数组作为函数参数
void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};
    printArray(numbers, 5);
    return 0;
}

7.排序算法

许多排序算法,如冒泡排序、选择排序、插入排序等,都基于数组来实现.

#include <stdio.h>

// 冒泡排序
void bubbleSort(int arr[], int size) {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

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

8. 注意事项

  • 数组越界:访问数组时,下标必须在合法范围内(0 到数组大小减 1),否则会导致数组越界,可能会引发不可预测的结果,如程序崩溃或数据损坏。
  • 数组大小:数组大小在定义时必须是一个常量表达式,不能使用变量来指定数组大小(在C99及以后的标准中支持变长数组,但使用时需要谨慎)。

通过以上内容,你可以全面了解C语言数组的基本概念、使用方法和注意事项,在实际编程中灵活运用数组来解决各种问题。

相关文章:

  • 经典内存泄漏问题
  • SQL Server2022版+SSMS安装教程(保姆级)
  • 【记录】环境报错问题:Error Get “https://registry-1.docker.io/v2/“
  • IP-----BGP协议
  • C# Unity 唐老狮 No.5 模拟面试题
  • Spring 源码硬核解析系列专题(扩展篇):Spring Batch 的恢复机制源码解析
  • LeetCode hot 100—合并两个有序链表
  • 【Spark+Hive】基于Spark大数据技术小红书舆情分析可视化预测系统(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅
  • Kotlin函数式编程与Lambda表达式
  • Docker安装Redpandata-console控制台
  • 华硕电脑开启电池保养模式的方法
  • 立体仓WMS同MES制造的协同
  • 2020最新Java面试题
  • opencv 模板匹配方法汇总
  • c语言笔记 数组篇
  • vue videojs使用canvas截取视频画面
  • Linux命令常用的有哪些?
  • nlp第十节——LLM相关
  • 013-2 订单支付超时自动取消订单(rocketmq jpa)
  • 迷你世界脚本玩家接口:Player
  • 江苏营销型网站策划/北京seo工程师
  • 建立企业网站/口碑营销案例
  • 网站开发一般要用到哪些软件/百度贴吧人工客服
  • 网站手机版怎么做/网络推广优化工具
  • 保定百度网站建设/北京seo学校
  • 从客户—管理者为某一公司做一份电子商务网站管理与维护的方案/网络营销专业学校排名