1.一维数组的创建和初始化
1.1 数组的创建
数组是一组相同类型元素的集合
数组的创建方式:
type_t arr_name [const_n]
⬇ ⬇
(数组的元素类型) (是一个常量表达式,用来指定数组的大小)
⬇ ⬇
举例: int arr [10]
数组创建的实例:
int arr[10]; //整形数组 char arr3[10]; //字符数组 float arr4[1]; //浮点数数组 double arr5[20]; //双精度浮点数数组
(注:数组创建,在C99标准之前,[ ]中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念,数组的大小可以使用变量指定,但是数组不能初始化。)
#include <stdio.h> int main() { int arr[10]; //创建数组 int count = 10; //生成一个整形变量 int arr2[count]; //使用变量声明数组大小 //VS2019 VS2022 这样的IDE,不支持C99中的变长数组 //C99 标准之后 数组的大小只能是常量表达式 //C99 标准中引入了 变长数组的概念,使得数组在创建的时候 //可以使用变量,但是这样的数组不能初始化 return 0; }
1.2 数组的初始化
在创建数组的同时给数组的内容一些合理初始值(初始化)
数组初始化的实例:
#include <stdio.h> int main() { int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 }; //完全初始化 int arr2[10] = { 1,2,3 }; //不完全初始化,剩余的元素默认都是0 //数组在创建的时候如果想不指定数组的大小就得初始化, //数组得元素个数根据初始化得内容来确定。 int arr3[] = { 1,2,3 }; //省略数组的大小,数组必须初始化,数组的大小 //根据初始化内容决定 //字符数组初始化: char arr4[] = "abc"; //这样是4个元素:a、b、c、\0 char arr5[] = {'a','b','c'}; //这样是三个元素:a、b、c。不会自动创建\0 char arr6[] = { 'a',98,'c' }; //可将字符写成ASCII码值,98对应b return 0; }
2.一维数组的使用
操作符 [ ] :下标引用操作符,它其实就是数组访问的操作符
一维数组的使用实例:
//一维数组的使用 #include <stdio.h> int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; //下标: 0 1 2 3 4 5 6 7 8 9 printf("%d\n", arr[5]); // []:下标引用操作符, //找到数组中下标为5的元素 printf("%d\n", arr[0]); //找到数组中下标为0的元素 int i = 0; int sz = sizeof(arr) / sizeof(arr[0]); //求元素个数 //元素个数 = 整个数组大小 / 每个元素大小 //strlen是求字符串长度的,sizeof是求整形数组大小的 //循环输出数组元素: for ( i = 0; i < sz; i++) { scanf("%d", &arr[i]); //&arr[i]:取数组元素i的地址 } //循环打印数组元素: for ( i = 0; i < sz; i++ ) //小于元素个数就继续打印 { printf("%d", arr[i]); //这里是访问元素,不是创建数组,所以可以使用arr[] //中可以使用变量i,即arr(i) } return 0; }
总结:
1. 数组是使用下标来访问的,下标是从0开始。
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; //下标: 0 1 2 3 4 5 6 7 8 9
2. 数组的大小可以通过计算得到。
int sz = sizeof(arr) / sizeof(arr[0]); //求元素个数
3.一维数组在内存中的存储(32位操作系统)
(演示代码:)
//数组在内存中的存储 #include <stdio.h> int main() { int arr[10] = { 1,2,3,4,5 }; int sz = sizeof(arr) / sizeof(arr[0]); int i = 0; for ( i = 0; i < sz; i++ ) { printf("&arr[%d] = %p\n", i, &arr[i]); //%d 对应 i //%p 对应 &arr[i] //&arr[i] 为取 数组中元素i的地址 } return 0; }
(int类型的数组中,相邻的两个元素相差4个字节,因为一个整形元素占4个字节)
(一维数组在内存中是连续存放的,所以当知道了数组的起始地址,就可以知道后面的其它元素)
4.二维数组的创建和初始化
4.1 二维数组的创建
//数组创建 //第一个[]:行 ; 第二个[]:列 int arr[3][4]; char arr[3][4]; double arr[3][4];
4.2 二维数组的初始化
//二维数组的初始化 #include <stdio.h> int main() { //二维数组的初始化 int arr[4][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7},{4,5,6,7,8} }; //第一种方式:使用{}一行一行赋值 int arr2[4][5] = { 1,2,3,4,5,2,3,4,5,6,3,4,5,6,7,4,5,6,7,8 }; //第二种方式:一行放满后放下一行 int arr3[4][5] = { {1,2,3},{5,6},{3,4,5},{4,5,6} }; //不完全初始化:未赋值的会用0补齐 int arr4[4][5] = { 1,2,3,4,5,2,3,4,5,6,3,4,5,6,7,4,5,6 }; //不完全初始化:未赋值的会用0补齐 //二维数组即使初始化了,行也是可以省略的,但是列是不能省略的 int arr5[][5] = { {1,2,3},{2,3,4},{3,4,5,6,7},{1,1,1,},{2,2,2} }; //行可以通过输入的数据确定 return 0; }