数组是一组相同元素的集合。
一:一维数组
1:初始化
//完全初始化
int arr1[5] = {1,2,3,4,5};
//不完全初始化
int arr2[5] = {1,2};
//不完全初始化,默认数组没有定义的元素的值为0
int arr3[] = {1,2,3,4,5};
//对于这种没有声明个数的数组,其元素个数由其初始化的数量决定。
//像这个数组,初始化包含了5个数,那么其个数就是默认为5个。
2:数组的类型
数组的类型就是去掉数组名留下来的内容。
如,int arr[3]的类型是int [3],char arr[3]的类型时char [3]。
3:数组的打印
如果要打印出数组中的所有元素,那么需要借助循环语句。
#include<stdio.h>
int main(){
int arr[5] = {1,2,3,4,5};
for(int i = 0;i <= 4,i++){
printf("%d",arr[i]);
}
return 0;
}
4:一维数组在内存中的储存(取地址)
取地址需要用%p来储存
#include <stdio.h>
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
for (int i = 0; i <= 9; i++) {
printf("%p\n", &arr[i]);//数组取地址需要用到取地址符&
}
return 0;
}
运行结果如下:
这里需要提到,上面的结果是X64,即64位的环境,地址是64bit位的比较长。
因此,我们换为X86,即32位的环境,如下
由于这里的地址的16进制型,可以发现,每相邻的元素之间相差4,因为这个数组类型是int []型,一个int型占4个bit,因此可以发现,数组在内存中是连续存放的。
5:sizeof计算数组元素的个数
sizeof是用来计算类型或变量的大小,但是其同样可以计算数组的大小,单位是字节。
#include <stdio.h>
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d", sizeof(arr) / sizeof(int));
//sizeof(arr) = 40。是计算这个数组的大小
//sizeof(int) = 4。是计算int这个类型的大小
//于是两者相除便得出数组元素的个数
return 0;
}
使用sizeof来计算个数,这样无论数组怎么变,sizeod都可以方便地求出个数。
二:二维数组
把一维数组当作数组的元素时,这个数组就是二维数组。同理,把二维数组当作元素时,那么这个数组就是三维数组。
int arr[2][3] = { 0 };
//其中2代表有两行,3代表有三列
1:二维数组的初始化
int arr1[2][3] = {1,2,3,4,5};
//这是完全初始化
int arr2[2][3] = {1 ,2};
//这是不完全初始化,未赋值的元素默认为0
按照行初始化:
int arr3[2][3] = {{1,2},{4}};
//{1,2}代表第一行是1,2,0
//{4}代表第二行是4,0,0
初始化的省略:
int arr4[][3] = {0};
//省略只能省略行数,不能省略列数
2:二维数组的输出
include<stdio.h>
int main(){
int arr[2][3] = {1,2,3,4,5};
for(int i = 0;i < 2;i++){
for(int b = 0;b < 3;b++){
printf("%d",arr[i][b]);
}
printf("\n");//使每行都换行打印
}
return 0;
}
3:二维数组在内存中的储存
二维数组在内存中同样是连续的
三:C99中的变长数组
定义一个数组时,我们需要考虑其需要的元素,通常情况下,我们只能估计一个稍大于需要的值,但是这样会造成浪费储存。于是,C99出来了一个变长数组,就是可以将数组的个数用变量表示,即int arr[i]; (变长数组不需要初始化)。再根据一系列式子,求出真正需要的个数。
不过在VS2022中,无法使用变长数组。
四:字符串型数组
如果需要定义一个字符串变量,那么必定需要用到数组。
其初始化格式与其他的不同:
char arr[] = "12345";
//或者
char arr[] = {'1','2','3','4','5','\0'};
其元素个数就是其字符的个数,\0在内,但\0不纳入计算中。
其输出也有差异:
//输出整个字符串
char arr1[] = "12345";
printf("%s",arr1);
//输入元素
printf("%c",arr[1]);
区别就在于,相比与其他类型数组,字符串型可以 直接输出整个数组。