**
1、数组的概念及分类
2、数组的创建与初始化
3、数组的使用
4、数组在内存中的存储
5、sizeof计算数组元素的个数
**
数组是⼀组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息:
• 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。
• 数组中存放的多个数据,类型是相同的。
数组的分类:
数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组。
1、一维数组的创建
type arr_name[常量值];
存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的⼤⼩和数组的元素类型。
type 指定的是数组中存放数据的类型,可以是: char、short、int、float 等,也可以⾃定义的类型。
arr_name 指的是数组名的名字,这个名字根据实际情况,起的有意义就⾏。
[ ] 中的常量值是⽤来指定数组的⼤⼩的,这个数组的⼤⼩是根据实际的需求指定就⾏。
eg.
int arr[10]; //arr数组中存放的元素是整形类型
char a[100]; //a数组中存放的元素是字符类型
2、二维数组的创建
type arr_name[常量值1][常量值2];
例如:
int arr[3][5];
double data[2][8];
3表⽰数组有3⾏。
5表⽰每⼀⾏有5个元素。
int 表⽰数组的每个元素是整型类型。
arr 是数组名,可以根据⾃⼰的需要指定名字。
data数组意思基本⼀致。
3、数组的初始化
//一维数组初始化
//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1};//第⼀个元素初始化为1,剩余的元素默认初始化为0
//错误的初始化 - 初始化项太多
int arr3[3] = {1, 2, 3, 4};
//二维数组是使用大括号来初始化
ps:在32位操作系统下(x86),以下代码会死循环。
#include
int main()
{
int i = 0;
int arr[] = {1,2,3,4,5,6,7,8,9,10};
for(i=0; i<=12; i++)
{
arr[i] = 0;
printf("hello bit\n");
}
return 0;
}
原因:(数组在内存从低到高的地址中存放)数组越界后也会为越界的部分创建地址,将其存入其中,创建a[12]的地址时覆盖i的地址,同一地址同时只能存放一个值,该值变化时,存放在该地址中的量的值一同改变,导致当 a[12]被赋值为0时,i的值一同变为0,从而产生了死循环。
1、数组下标
数组下标是从0开始的,假设数组有n个元素,最后⼀个元素的下标是n-1下标就相当于数组元素的编号。
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
// 0 1 2 3 4 5 6 7 8 9
在C语⾔中数组的访问提供了⼀个操作符 [] ,这个操作符叫:下标引⽤操作符。
有了下标访问操作符,我们就可以轻松的访问到数组的元素了,⽐如我们访问下标为7的元素,我们就可以使⽤ arr[7] ,想要访问下标是3的元素,就可以使⽤ arr[3]。
2、数组的打印(利用for循环实现)
int a[10] = {1,2,3,4,5,6,7,8,9,10};
for(int i=0; i<10; i++)
{
printf("%d ",a[i]);
}
3、数组的输入(利用for循环实现)
int a[10] = {1,2,3,4,5,6,7,8,9,10};
for(int i=0; i<10; i++)
{
scanf("%d ",&a[i]);
}
依次打印数组元素的地址:
#include
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0;
for(i=0; i<10; i++)
{
printf("&arr[%d] = %p\n ", i, &arr[i]);
}
return 0;
}
输出结果:
从输出的结果我们分析,数组随着下标的增⻓,地址是由⼩到⼤变化的,并且我们发现每两个相邻的元素之间相差4(因为⼀个整型是4个字节)。所以我们得出结论:数组在内存中是连续存放的。
sizeof 中C语⾔是⼀个关键字,是可以计算类型或者变量⼤⼩的,其实 sizeof 也可以计算数组的⼤⼩。
#include
int main()
{
int arr[10] = {0};
printf("%d\n", sizeof(arr));//数组所占内存大小
return 0;
}
接下来就能计算出数组的元素个数:
#include
int main()
{
int arr[10] = {0};
int sz = sizeof(arr)/sizeof(arr[0]);//数组所占内存大小/一个元素所占内存大小
printf("%d\n", sz);
return 0;
}
这⾥的结果是:10,表⽰数组有10个元素。