14、数组

1、什么是数组

数组,从字面上看,就是一组数据的意思.因此,数组可以理解为用来存储一组数据的

2、数组的特点
  • 只能存放一种类型的数据,比如int类型的数组、float类型的数组
  • 里面存放的数据称为“元素”
3、数组定义格式

元素类型 数组名[元素个数];
备注: 之所以需要元素个数,需要在内存中开辟存储空间。
比如, int score[4] 则需要在内存中开辟 4个int类型的空间

4、初始化
4.1、声明并初始化

int score[3] = {90,89,90};

4.2、先声明后再初始化

int score[3];
score[0] = 90;
score[1] = 90;
score[2] = 90;

4.3、声明不指定个数

int score[] = {90,89,90};

4.4、数组使用

数组名[index] {其中,index>=0}

5、代码实例
5.1、源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
int main()
{
int score[3];
score[0] = 1;
score[1] = 2;
score[2] = 3;
for (int i = 0; i < 3; ++i)
{
printf("score[%d]=%d\n",i,score[i]);
}
return 0;
}
5.2、运行结果

运行结果

6、数组内存分析
6.1、源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
int main()
{
int score[3];
printf("&score=%p\n",&score);
printf("score=%p\n",score);
printf("score[0]=%p\n",&score[0]);
printf("===============================\n");
score[0] = 1;
score[1] = 2;
score[2] = 3;
for (int i = 0; i < 3; ++i)
{
printf("score[%d]=%d\taddress:%p\n",i,score[i],&score[i]);
}
return 0;
}
6.2、运行结果

运行结果

6.3、内存图

运行结果

6.4、疑问
  • &是什么意思?
    &是获取变量在内存的地址操作符
  • 为什么&score、score、&score[0]的内存地址相等?
    这里有个”指针”的知识点,指针类型的变量是用来存放变量的内存地址,目前先把变量名score理解为是指向自己的指针。
  • 声明数组时,为什么要指明元素个数?
    便于开辟一段连续的内存地址空间
  • printf中的%p是什么意思
    是以十六进制的格式打印内存地址