一,数组的概念
数组是一组相同类型元素的集合。数组分为一维和多维数组。
二,一维数组的创建和初始化
1.数组创建
基本语法:
1 type arr_name[常量值] ;
type指的是数组中存放数据的类型。如:char,short,int ,也可以为自定义类型。
arr_name指的是数组名的名字,可以自己取。
2.数组的初始化
数组的初始化一般使用大括号,将数据放在大括号中。初始化又分为完全初始化和不完全初始化。
int arr[5] ={1,2,3,4,5};//完全初始化
int arr[5] ={1,2,3,};//不完全初始化
3.数组的类型
数组去掉数组名留下的就是数组的类型。例如:
1 int arr1[10]; //arr1数组类型是 int [10]
2 int arr2[12]; //arr2数组类型是 int [12]
3 char ch[5]; // ch数组类型是 char [5]
三,一维数组的使用
1.数组下标
数组的下标是从0开始的,如果有n个元素,那么最后一个元素的下标为n-1。
在数组的访问中,C语言提供了一个操作符[ ],这个操作符叫:下标引用操作符。
例如:我们访问下标为3的元素,那么就是使用arr[3],对应的数组元素就是4。
2.数组元素的打印
3.⼀维数组在内存中的存储
#include <stdio.h>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.sizeof计算数组元素个数
我们可以使用sizeof来得知数组元素个数。sizeof 中C语言是⼀个关键字,是可以计算类型或者变量大小的,其实 sizeof 也可以计算数组的大小。
例:
1 #include <stido.h>23 int main()4 {5 int arr[10] = {0};6 printf("%d\n", sizeof(arr));7 return 0;8 }
#include <stido.h>int main(){int arr[10] = {0};printf("%d\n", sizeof(arr[0])); // 计算⼀个元素的⼤⼩,单位是字节return 0;}
#include <stido.h>int main()int arr[10] = {0};int sz = sizeof(arr)/sizeof(arr[0]);printf("%d\n", sz);return 0;}
四,⼆维数组的创建
1.⼆维数组概念
2.⼆维数组的创建
语法:
type arr_name[常量值1][常量值2];int arr[3][5];double data[2][8];
注:
• 3表⽰数组有3⾏• 5表⽰每⼀⾏有5个元素• int 表⽰数组的每个元素是整型类型• arr 是数组名,可以根据⾃⼰的需要指定名字,data数组意思基本⼀致。
3.⼆维数组的初始化
a.不完全初始化
int arr1[3][5] = {1,2};int arr2[3][5] = {0};
b.不完全初始化
int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
c.按照⾏初始化
int arr4[3][5] = {{1,2},{3,4},{5,6}};
int arr5[][5] = {1,2,3};
五,⼆维数组的使用
1.⼆维数组的下标
1 int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
2.⼆维数组的输入和输出
代码演示
#include <stdio.h>int main(){int arr[3][5] = {0};//输入数据int i = 0; //控制行for(i=0; i<3; i++) // 产⽣⾏号{int j = 0;for(j=0; j<5; j++) // 产⽣列号{scanf("%d", &arr[i][j]); // 输⼊数据}}// 输出for(i=0; i<3; i++) // 产⽣⾏号{int j = 0;for(j=0; j<5; j++) // 产⽣列号{printf("%d ", arr[i][j]); // 输出数据}printf("\n");}return 0;}
六,⼆维数组在内存中的存储
⼆维数组中的每个元素都是连续存放的。
七,C99中的变⻓数组
int n = a+b;int arr[n];
注:变⻓数组的意思是数组的⼤⼩是可以使⽤变量来指定的,在程序运⾏的时候,根据变量的⼤⼩来指定数组的元素个数,⽽不是说数组的⼤⼩是可变的。数组的⼤⼩⼀旦确定就不能再变化了。
遗憾的是在VS2022上,虽然⽀持⼤部分C99的语法,没有⽀持C99中的变⻓数组。