目录
1.数组的概念
数组是一组相同类型的元素的集合
2.一维数组的创建和初始化
(1)一维数组的创建
-
基本语法:
type name[num]
type:指的是数组的类型,可以是char,int,short,float等类型
name:指的是数组的名字,自身根据数组的功能来命名,数组名和变量名一样不能是关键字
num:代表数组的大小,num必须是常量,不能是变量或者常变量(用const定义的量)。
-
例
int arr[5];
char str[4];
float arr1[8];
(2)一维数组的初始化
在数组创建时,我们可以给数组一定的值,这就是数组的初始化。在数组初始化时,初始化的数据放在{ }中。
-
完全初始化
在初始化的时候,数组中元素的个数等于数组的大小(即[ ]中num的值)时,就叫做完全初始化。
在完全初始化的时候,[ ]中也可以不标明元素的个数,编译器会根据初始化的元素个数自己判断。
-
例
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
double str[3] = { 1.1,2.2,3.3 };
char str1[4] = { 'a','b','c' };
int arr1[] = { 1,2,3,4,5,6 };//编译器会根据初始化的元素个数自动给数组创建大小
-
不完全初始化
在初始化数据时,只将部分元素初始化,其他元素(未初始化的元素)默认初始化为0
-
例
int arr[15] = { 1,2,3,4 };//剩余的元素默认初始化为0
char str[10] = { 'a','b','c' };//剩余的元素默认初始化为0
(3)数组的类型
数组算是一种自定义类型,数组去掉数组名剩下的就是数组的类型
-
例
int arr[5] = { 1,2,3,4,5 };
//该数组的类型是int [5]
char str[5] = { 'a','b','c' };
//该数组的类型是char [5]
3.一维数组的使用
(1)数组的下标
-
概念
C语言标准规定数组是有下标的,每一个元素都有自己对应的下标。数组的下标是从0开始的,若有n个元素,则以n - 1结束。
int arr[10] = { 1,2,3,4,,5,6,7,8,9,10 } | ||||||||||
数组 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
-
下标的作用
1)访问数组中的某个元素
在数组中若想访问某个元素可以用[ ](下标引用操作符)来访问。访问格式为:
name [元素的下标]
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
char str[5] = { 'a','b','c','d','f' };
printf("%d\n", arr[6]);
printf("%c\n", str[2]);
return 0;
}
输出的结果为 :
2)访问数组中所有的元素(数组的打印)
数组的打印可以通过数组的下标分别访问每一个数组然后打印出来。(这里就需要使用到循环结构)
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);//在数组中计算元素的个数用sizeof
int i = 0;
for(i = 0; i < sz; i++)
{
printf("%d ",arr[i]);
}
return 0;
}
输出结果为:
3)数组的输入(给数组赋值)
我们除了可以通过下标打印出数组中的每一个元素外,还能通过下标给数组输入值。方法和打印数组类似
#include <stdio.h>
int main()
{
int arr[10];
int i = 0;
for(i = 0; i < 10; i++)
{
scanf("%d",&arr[i]);
}
for(i = 0; i < 10; i++)
{
printf("%d ",arr[i]);
}
return 0;
}
输入和输出结果为 :
4. 一维数组在内存中的存储
一维数组在内存中是连续存放的。
我们可以通过打印元素的地址来观察,代码如下:
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("arr[%d] = %p\n", i, &arr[i]);
}
return 0;
}
输出结果为:
通过观察我们可以发现:随着下标的增长,数组中每个元素的地址也随之增长,数组中相邻的两个元素的地址都相差4,因为每个整型变量站4个字节,数组是整型数组 。因此,我们可以推断:数组在内存中是连续存放的。
int arr[10] = { 1,2,3,4,,5,6,7,8,9,10 } | ||||||||||
数组 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
5.数组长度的计算(计算数组元素个数)
在遍历每个数组时,我们中想知道数组元素的个数,当数组中元素个数较多不方便数的时候,我们可以通过sizeof关键字来求出数组中元素的个数。
sizeof:是C语⾔中的⼀个关键字,是可以计算类型或者变量⼤⼩的,其实 sizeof 也可以计算数组的⼤⼩
sizeof计算数组的大小
#include <stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 };
int sz = sizeof(arr);
printf("%d\n",sz);
return 0;
}
输出结果为:
这里输出的结果是40,计算的是数组所占内存空间的总大小,单位是字节。由于数组是整型数组,数组中每个元素都是整型,因此,数组的大小就等于元素的个数乘以每个元素所占的字节数(4字节)== 20
sizeof计算数组元素的大小
因为数组是同类型元素的集合,所以数组中每个元素的大小都相等,我们就可以用首元素的大小来表示
#include <stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 };
int sz1 = sizeof(arr[0]);
printf("%d\n",sz1);
return 0;
}
输出结果为:
由此我们便可以计算数组元素的个数了
sizeof计算数组元素个数
数组的大小除以每个元素的大小就可以求得数组的元素个数
#include <stdio.h>
int main()
{
int arr[21] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,44,24,65,99,356 };
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d\n",sz);
return 0;
}
输出结果为:
使用这种方法计算数组的大小,以后在需要使用数组大小的地方就不会把数组写死了,当数组变化时,计算的数组的大小也会跟着变化。