数组属于构造数据类型和基本数据类型是有区别的,构造数据类型是基于基本数据类型得到的。构造数据类型还有指针,结构体,共用体,枚举。个人感觉(指针是C语言的精髓,结构体后期使用很广泛,共用体、枚举使用的比较少,像指针,结构体在STM32中随处可见)。
数组是由一系列相同的数据类型组成的一个集合(如:int [10],就是10个int类型的数据组成的一个集合)
元素:数组名[下标];下标:下标就是数组中元素的位置距离首地址的偏移量(具体的解释涉及到指针的知识,个人感觉数组和指针的关系是很紧密的,数组和指针的笔记放在一块看)
int a[5]; 1. 数组中第一个元素的表达:数组名[0] 2. 数组中“第一个元素”的地址表达:&数组名[0] , 数组名 3. 从键盘上获取一个数据,存储到数组中第一个元素里面:scanf("%d",&a[0]); 4. 输出下标为i的元素内容:printf("%d",a[i]);----将数组中第i+1个数据打印到我们屏幕上 5. 打印元素的地址:格式控制符 :%p 6. 打印数组中所有元素的地址:空间连续,地址也是连续
注意:&a = &a[0] = a。但是 “&a——表示整个数组的地址”
程序测试:
#include "stdio.h"
int main()
{
int a[5] = {0,1,2,3,4};
printf("a[0] = %d\n",a[0]);
printf("&a[0] = %p\ta = %p\n",&a[0],a);
for(int i=0;i<5;i++)
printf("&a[%d] = %p\t",i,&a[i]);
printf("\n");
for(int i=0;i<5;i++)
printf("(a+%d)= %p\t",i,(a+i));
printf("\n");
printf("&a = %p\t&(&a+1) = %p\n",&a,(&a+1));
return 0;
}
输出结果:
a[0] = 0
&a[0] = 0x7ffc2d694c00 a = 0x7ffc2d694c00
&a[0] = 0x7ffc2d694c00 &a[1] = 0x7ffc2d694c04 &a[2] = 0x7ffc2d694c08 &a[3] = 0x7ffc2d694c0c &a[4] = 0x7ffc2d694c10
(a+0)= 0x7ffc2d694c00 (a+1)= 0x7ffc2d694c04 (a+2)= 0x7ffc2d694c08 (a+3)= 0x7ffc2d694c0c (a+4)= 0x7ffc2d694c10
&a = 0x7ffc2d694c00 &(&a+1) = 0x7ffc2d694c14
注:个人笔记,只写了自己感觉主要的,感觉二维数组感觉就是在多个一维数组的组合,跟多解释在指针笔记中的数组数组部分。
|