数组的概念
数组:由一系列具有相同数据类型组成的集合
1)数据多(数据个数>=2)
2)数据意义一样,----->数据的类型一致
3)数据彼此独立,互不影响
元素:数组中的数据,用下标表示元素
下标:数据在数组中的排列顺序,从0开始排序
一维数组的定义 初始化
数组的定义
数组的定义格式
数据类型 数组名[长度];
说明:数据由数组元素的数据类型决定
数组名符标识符的命名------凡是由程序员自己命名的都是要符合标志符命名规则
数组名代表数组首元素的地址---->常量地址 长度:表示的是数组元素的个数,长度必须为整型常量表达式
int a[5]; //表示定义了一存储5个整型数据的数组
int a[‘A’]; //
int a[‘\n’+1]; //
int a[10+1];
错误的初始化
int n = 5;
int a[n]; //不符合语法规则,n为整型变量
int a[1.5+3.5]; //长度为实型数据,不符合语法规则
int a[]; //如果只定义,没写数据长度。不符合语法规则
int a[] = {0}; //表示初始化一个空间
数组的初始化,数组在定义的时候并赋值
int a[5] = {1,2,3,4,5}; int b[5] = a[5]//错误
- 数组在初始化的时候,采用大括号的形式进行赋值,并且只有在初始化的时候才能采用大括号的形式对其进行整体赋值。
- 如果数组只定义,不赋值,则数组元素的值为随机值
- 数组的初始化形式分为两种,一种为完全初始化,数组中所有的元素都有值,
另外一种初始化方式是数组进行部分初始化,系统默认从第一个元素开始赋值,未被初始化的元素赋值为0
int a[5] = {1,2,3}; - 数组与数组之间不能进行整体赋值,要通过数组元素与元素之间进行赋值
- 如果对数组进行初始化,数组的长度省略,则系统按照数组中初始化的元素的数据进行分配
int a[]= {1,2,3}
一维数组的赋值 与引用
-
数组元素的引用
数组引用元素的方式:数组名[下标] ------->元素
下标从0开始,下标一定小于数组的长度
数组名[下标]----->如果出现在定义语句的时候表示定义数组,其他情况下均表示数组的元素 -
数组元素的赋值
采用数组名[下标] 对其数组中的元素进行逐一赋值
int main()
{
int a[5];
int b[5]={1,2,3,4,5};
a[0] = 3;
a[1] = 6;
a[4] = 9;
printf("%d\n",a[0]); //3
printf("%d\n",a[1]); //6
printf("%d\n",a[2]); //随机值
printf("%d\n",a[3]); //随机值
printf("%d\n",a[4]); //9
printf("---------------------------\n");
int i;
for(i = 0; i < 5; i++)
printf("%d ",b[i]); //依次打印数组中每一个元素的值
}
输出结果
[csy@local cpp]$ ./init1
3
6
134513920
134513472
9
---------------------------
1 2 3 4 5 [csy@local cpp]$ vim array_init1.c
如何采用循环的方式给数组中的元素依次赋值:
1)第一种形式:通过 数组名[下标] ,利用循环的方式进行赋值----->终端输入
#include <stdio.h>
int main()
{
int b[10]; //有10个整型元素的数组
int i;
for(i = 0; i < 10; i++)
{
scanf("%d",&b[i]); //终端依次输入元素的值
}
printf("---------------------------------\n");
for(i = 0; i < 10; i++)
{
printf("%d ",b[i]);//依次打印数组中每个元素的值
}
printf("\n");
}
运行结果:
[csy@local cpp]$ vim array_init2.c
[csy@local cpp]$ gcc array_init2.c -o init2
[csy@local cpp]$ ./init2
1
2
3
4
5
6
4
7
8
9
---------------------------------
1 2 3 4 5 6 4 7 8 9
第二种形式,通过 数组名+偏移量 进行对数组元素进行依次赋值或者打印
数组名表示数组首元素的地址
数组名+i ------>表示下标为i的元素的地址
int a[5]; //在定义一个数组的时候,系统分配空间时候,是一块连续的内存空间
a == &a[0] a == a[0]
a+1 == &a[1] (a+1) == a[1]
a+i == &a[i] *(a+i) == a[i]
#include <stdio.h>
int main()
{
char a[5] = {3,5,67,9,10}; //完全初始化
printf("%d\n",*a);
printf("%d\n",a[0]);
printf("%d\n",*(a+1));
printf("%#p\n",a);
printf("%#p\n",a+1);
printf("%#p\n",&a[1]);
}
输出结果
[csy@local cpp]$ ./init3
3
3
5
0xbfd9497b
0xbfd9497c
0xbfd9497c
一维数组的大小
一维数组的大小 = 数组的长度(元素的个数)*元素所占空间的大小
元素个数的计算= sizeof(数组名)/sizeof(元素)
举个栗子:
#include <stdio.h>
int main()
{
int a[] = {10,23,4,5,6,7,9,0,4,2,5,6};
int n;
n = sizeof(a)/sizeof(a[0]);
printf("数组的大小:%d\r\n",sizeof(a));
printf(" 数组元素个数% d\r\n",n);
}
输出结果:
[csy@local cpp]$ vim arrar_size.c
[csy@local cpp]$ gcc arrar_size.c -o size
[csy@local cpp]$ ./size
数组的大小:48
数组元素个数 12
[csy@local cpp]$ vim arrar_size.c