1 概述

数组是在程序编程过程过程中把具有相同数据类型的若干数据按有序排列形成的称之为数组。数组的==本质就是在内存中具有相同类型的连续的变量空间==其内部所有的数组成员在内存中的地址是连续的。如果我们定义n个元素的数组,其在内存中表现形式如下图:

image-20231110150133202

可以看见他们是按顺序放在一起的。


2 一维数组

一维数组的基本代码格式为 数据类型 数组名[元素个数]={第一个元素值,第二个元素值,第三个,。。。};,当我们去调用时则要写出数组的下标以确定我们需要调用的数组值,==注意:在调用时第一个元素的数组下标为0==,如

1
2
3
int num[3]={12,35,67};
//调用第一个元素值
printf("%d",num[0]);
  • 在数组中定义了n个元素则第一个元素下标为0,即 数组名[0] 而最后一个为 数组名[n-1]
  • 在数组中每个定义的元素占据的空间相当于一个对应类型的一个变量所占用的空间,如上述例子中num的每个元素占据的空间为一个int类型,整个数组为3个int类型空间

一维数组的其他定义方式:

1
int num[]={12,34,54,756};
  • 在定义数组时可以不写元素个数,在有元素的情况下,电脑会根据元素个数自动开辟对应空间存储元素。
1
int num[10];
  • 定义数组时可以不写元素对应值,但是必须要有元素个数。

注意:在定义数组元素个数时不能使用变量,但是可以使用常量,示例如下:

1
2
3
4
5
6
#include <stdio.h>
int main(){
const int n=3;
num[n];
return 0;
}

或者

1
2
3
4
5
6
7
#include <stdio.h>
#define n 5
int main()
{
num[n];
return 0;
}

但当我们不知道数组定义了多少数据时可以用sizeof,如下:

1
2
num[]={12,13,41,123,543,645,123,123,534,645,756,234}
printf("数组元素个数为%d",sizeof(num)/sizeof(num[0]));

3 二维数组和多维数组

在二维数组中格式有一点变化,如

1
2
3
4
5
6
num[2][3]={{1,2,3},{5,6,7}};
//为了更直观我们可以这样写
num[2][3]={
{1,2,3},
{5,6,7}
};
  • 我们可以了理解为一维是一条线,而二维数组是一个面,类比成平面理解。

在多维数组中我们可以推理类似为三位空间的立方,思维空间等等。三维数组如下:

1
2
3
4
num[2][2][2]={
{{1,2},{4,5}},
{{6,7},{8,9}}
}
  • 最简单的记住方法为有几维就套几个花括号
  • 多维数组的本质都是一维数组。

资料参考

b站的黑马程序员