C语言数组


前言

数组(Array)是编程中最基础、最常用的数据结构之一,几乎在所有编程语言中都存在。它提供了高效的随机访问能力,但同时也伴随着许多潜在的陷阱。本文将详细介绍数组的使用方法、常见问题及优化技巧,帮助开发者更好地掌握数组的应用。

数组的定义

数组是一组有序的、具有相同数据类型的元素的集合。在不同编程语言中,数组的声明方式略有差异。
以 C 语言为例,声明一个包含 5 个整数的数组: int arr[5]; 
在 Java 中,创建一个长度为 5 的整数数组: int[] arr = new int[5];

 数组的应用

  • 数组越界访问会导致未定义行为,需确保索引合法。
  • sizeof(arr)返回数组总字节数,sizeof(arr[0])返回单个元素大小。
  • 函数传递数组时通常需额外传递数组大小,因数组名会退化为指针
#include
int mian()
{

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

// 部分初始化,未指定值默认为0
int partial[5] = {1, 2}; // [1, 2, 0, 0, 0]

// 省略大小,编译器自动推断
int auto_size[] = {10, 20, 30}; // 大小为3
return 0;
}
 

二维数组的初始化

#include
int main()
{
// 定义一个2行3列的二维数组
int matrix[2][3] = {
    {1, 2, 3},
    {4, 5, 6}
};

// 访问元素:matrix[行][列]
printf("%d", matrix[1][2]); // 输出6
return 0;
}
 

要注意二维数组实际上就是一维数组拼接起来的,下表是从0开始的访问下标不能超过定义的数目

对于声明为int a[3][3]的二维数组,内存中实际存储顺序为:

int a[2][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}};
 

当访问a[0][4]时,虽然逻辑上越界了,但物理内存上会访问到a[1][0]的位置:

printf("%d", a[0][4]);  // 输出5(即a[1][0])
 

数组下标访问实际上就是a[i]等同于*(a+i);

  • 尽量按内存顺序访问数组(提高缓存命中率)。

  • 避免频繁跳行访问(如 arr[i][j] 和 arr[i+1][j] 比 arr[i][j] 和 arr[i][j+1] 慢)。

  • 行优先和列优先看编译器

  • 赋值的话不能住直接给数值,要访问下表给值

有问题的话私信


总结

数组虽然简单,但使用时有许多细节需要注意。掌握这些技巧可以避免常见错误,并优化程序性能。如果你有任何问题,欢迎在评论区留言讨论!

你的点赞和收藏是我创作的动力!

你可能感兴趣的:(c语言,开发语言)