C语言数组介绍和用法

简介: C语言数组介绍和用法

前言

本篇文章将带大家学习C语言中的数组,数组在C语言中是一个比较重要的点,大家需要好好理解并多加使用练习。


一、数组的定义

在 C 语言中,数组是一组同类型的元素的集合。数组中的每个元素都可以通过它的下标访问,并且下标是从0开始的整数值。举个例子,下面是一个包含5个整数的数组:

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

我们也可以定义float和double类型的数组:

float numbers[5] = { 1.0, 2.0, 3.0, 4.0, 5.0 };
double numbers[5] = { 1.0, 2.0, 3.0, 4.0, 5.0 };

二、数组的大小

在 C 语言中,可以使用 sizeof() 运算符来获取一个数组的大小,即数组在内存中占用的字节数。例如,假设有一个整数数组 arr,可以使用以下代码获取该数组的大小:

int arr[5] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(int);

在上述代码中,sizeof(arr) 返回的是整个数组在内存中的字节数,sizeof(int) 返回一个整数类型占用的字节数。由于 arr 中包含5个整数,因此可以通过除以一个整数元素的字节数来计算数组的大小,结果为5。

数组总大小为数组元素类型大小 * 数组元素总个数


三、数组的访问方法

在 C 语言中,数组的访问通常通过下标来实现,即使用数组名和方括号内的索引来访问数组中的元素。例如,假设有以下整型数组:

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

访问数组中的元素通常使用下标,如下所示:

int first = arr[0];    // 获取数组中的第一个元素
int third = arr[2];    // 获取数组中的第三个元素
arr[4] = 6;            // 修改数组中的第五个元素

需要注意的是,数组的下标从0开始,因此第一个元素的下标是0,最后一个元素的下标是数组大小-1。


四、使用for循环遍历数组

在 C 语言中,可以使用 for 循环遍历数组中的元素。通常情况下,可以使用数组大小来控制循环的次数。以下是遍历整型数组的示例代码:

int arr[5] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(int);   // 获取数组大小
for (int i = 0; i < size; i++) {    // 遍历数组
    printf("%d ", arr[i]);
}

在上面的代码中,首先计算出数组的大小,然后使用 for 循环遍历数组中的每个元素,输出其值。循环变量 i 作为数组的索引,从0开始到 size-1 结束。

需要注意的是,数组下标必须在合法的范围内,否则可能导致未定义的行为,例如访问越界内存。在遍历数组时,要保证数组下标不超过数组大小的范围,否则会导致程序错误。


五、数组地址的访问方法

每一个数组在内存中都会有一块属于自己的内存空间,那么我们如何来知道这块内存空间的地址呢?

在 C 语言中,可以使用数组名来获取数组的首地址,即数组中第一个元素的内存地址。对于一维数组,数组名即为数组的首地址。

例如,假设有以下整型数组:

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

那么我们访问数组地址的方法有两种:

一种是通过数组名来访问

一种是通过对数组第一个元素取地址来访问

printf("%d\n", arr);
printf("%d\n", &arr[0]);

其实这两种访问的方法是有区别的。

使用数组名访问数组地址,可以得到整个数组在内存中的起始地址,即数组第一个元素的地址。

而使用数组第一个元素访问数组地址是指通过指向数组第一个元素的指针来访问数组元素的地址。

因为数组的第一个元素的地址就是数组在内存中的起始地址。所以使用这两种方法访问得到的结果都是相同的。

六、二维数组

在 C 语言中,二维数组是指由多行和多列构成的数组。二维数组可以看作是一种特殊的数组,它可以通过行和列的下标来访问数组中的元素。二维数组的定义可以使用以下语法:

int arr[row][col];

其中 row 和 col 分别指定了二维数组的行数和列数。例如,下面是一个声明了 3 行 4 列的二维整型数组的示例代码:

int arr[3][4];

可以使用类似于一维数组的方式对二维数组进行初始化。例如,以下代码将二维数组初始化为一个单位矩阵:

int identity[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};

访问二维数组的元素可以使用类似于访问一维数组的方式。例如,以下代码将访问二维数组中第二行第三列的元素:

arr[1][2] = 10;

需要注意的是,二维数组的行和列都是从 0 开始编号的。因此,二维数组的行数可以使用 sizeof(arr) / sizeof(arr[0]) 来计算,列数可以使用 sizeof(arr[0]) / sizeof(arr[0][0]) 来计算。


七、二维数组的遍历

int arr[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("%d ", arr[i][j]);
    }
    printf("\n");
}

这个示例代码中,二维数组 arr 被初始化为一个 3 行 4 列的矩阵,使用嵌套的两个 for 循环遍历了数组中的所有元素。对于每个元素,使用 arr[i][j] 的方式来获取它的值,并使用 printf 函数输出结果。

需要注意的是,在使用 for 循环遍历二维数组时,外层循环变量控制行,内层循环变量控制列。在每次循环中,使用 arr[i][j] 表示第 i 行第 j 列的元素。循环变量的初始值和终止条件可以根据数组的大小进行相应的调整。

结果:

总结

本篇文章讲解了数组的基本概念及数组的访问方法,这些知识点大家需要好好理解并加以练习。


相关文章
|
20天前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
43 4
|
2月前
|
存储 编译器 C语言
【c语言】数组
本文介绍了数组的基本概念及一维和二维数组的创建、初始化、使用方法及其在内存中的存储形式。一维数组通过下标访问元素,支持初始化和动态输入输出。二维数组则通过行和列的下标访问元素,同样支持初始化和动态输入输出。此外,还简要介绍了C99标准中的变长数组,允许在运行时根据变量创建数组,但不能初始化。
42 6
|
2月前
|
存储 人工智能 BI
C语言:数组的分类
C语言中的数组分为一维数组、多维数组和字符串数组。一维数组是最基本的形式,用于存储一系列相同类型的元素;多维数组则可以看作是一维数组的数组,常用于矩阵运算等场景;字符串数组则是以字符为元素的一维数组,专门用于处理文本数据。
|
2月前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
2月前
|
存储 C语言
C语言:一维数组的不初始化、部分初始化、完全初始化的不同点
C语言中一维数组的初始化有三种情况:不初始化时,数组元素的值是随机的;部分初始化时,未指定的元素会被自动赋值为0;完全初始化时,所有元素都被赋予了初始值。
|
2月前
|
存储 数据管理 编译器
揭秘C语言:高效数据管理之数组
揭秘C语言:高效数据管理之数组
|
2月前
|
C语言 C++
保姆式教学C语言——数组
保姆式教学C语言——数组
19 0
保姆式教学C语言——数组
|
2月前
|
C语言
C语言数组
C语言数组
21 0
|
2月前
|
存储 C语言 索引
c语言回顾-数组(全网最详细,哈哈哈) (下)
c语言回顾-数组(全网最详细,哈哈哈) (下)
46 0
|
2月前
|
存储 编译器 C语言
c语言回顾-数组(全网最详细,哈哈哈)(上)
c语言回顾-数组(全网最详细,哈哈哈)(上)
59 0