C 数组详解

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 在C语言中,数组是一种用于存储多个同类型数据的集合。本文介绍了数组的基本特性与使用方法,包括定义与初始化、索引访问、多维数组、指针操作、大小计算及函数传递等内容。数组名可视为指向首元素的指针,支持遍历、排序与查找等常见操作。数组大小固定,访问越界会导致未定义行为。此外,还可以将数组嵌套在结构体中以增加数据复杂性。

在C语言中,数组是一种用于存储多个同类型数据的集合,其基本特性和使用方法如下:

1. 数组的定义和初始化

数组由一系列相同类型的元素构成,可以通过如下方式定义和初始化:

// 定义数组
int arr[5]; // 创建一个可以存储5个整数的数组

可以在定义时初始化数组:

int arr[5] = {
   1, 2, 3, 4, 5}; // 定义并初始化数组

如果省略数组大小,编译器会根据初始化列表的元素数量自动确定大小:

int arr[] = {
   1, 2, 3, 4, 5}; // 自动确定大小,大小为5

2. 数组索引

数组的索引从0开始,可以通过下标访问各个元素:

int first = arr[0]; // 访问第一个元素
arr[2] = 10; // 修改第三个元素的值为10

3. 多维数组

C语言支持多维数组,一般使用二维数组较为常见:

int matrix[3][4]; // 创建一个3行4列的二维数组

初始化二维数组的方式:

int matrix[2][3] = {
   
    {
   1, 2, 3},
    {
   4, 5, 6}
};

4. 数组与指针

数组名在表达式中通常被视为指向第一个元素的指针:

int *p = arr; // p指向数组的第一个元素

可以通过指针实现数组的遍历:

for (int i = 0; i < 5; i++) {
   
    printf("%d ", *(p + i)); // 通过指针访问数组元素
}

5. 数组的大小

可以使用sizeof运算符计算数组的大小(以字节为单位):

size_t size = sizeof(arr); // 数组的总字节数
size_t length = sizeof(arr) / sizeof(arr[0]); // 数组中元素的个数

6. 数组的传递

在C语言中,数组不能直接作为函数参数传递,实际上传递的是指向数组第一个元素的指针:

void function(int arr[], int size) {
   
    for (int i = 0; i < size; i++) {
   
        printf("%d ", arr[i]);
    }
}

int main() {
   
    int arr[] = {
   1, 2, 3, 4, 5};
    function(arr, 5); // 传递数组
}

7. 数组的限制

  • 数组的大小在定义时必须是常量(不可变量),不能在运行时动态改变。
  • 数组元素之外的访问会导致未定义行为(如越界)。
  • C语言不提供数组的内置边界检查,因此访问边界外的元素可能导致程序崩溃或数据错误。

8. 常见操作

  • 遍历:使用循环结构访问和修改数组元素。
  • 排序:可以使用冒泡排序、选择排序等经典算法对数组进行排序。
  • 查找:可以实现线性查找或二分查找等算法来查找数组中的元素。

9. 嵌套数组和结构体

可以将数组嵌套在结构体中,增加数据的复杂性:

typedef struct {
   
    char name[30];
    int scores[5];
} Student;
相关文章
|
5月前
数组(3)
数组(3)
34 2
|
5月前
数组(2)
数组(2)
31 1
|
5月前
|
存储 算法 编译器
数组(1)
数组(1)
33 0
|
6月前
|
存储 搜索推荐 算法
C数组
C数组
34 0
|
6月前
|
编译器 C++
C++系列四:数组
C++系列四:数组
|
6月前
|
存储 人工智能 算法
4.为何数组下表从0开始
4.为何数组下表从0开始
63 1
|
6月前
|
存储 程序员 C++
|
11月前
|
存储 编译器 程序员
数组详解
数组详解
67 0
|
机器学习/深度学习 Java
【数组的使用】
【数组的使用】
48 0
|
算法
三 数组
三 数组
56 0