1. 一维数组
数组是一组相同类型元素的集合。(存放一组数)
1.1 数组的创建
数组创建方式:
type_t arr_name [const_n]; //type_t 指数组的元素类型 //const_n 常量表达式,指定数组的大小
🍤数组创建实例:
int arr[9]; //不同数据类型的数组 char arr2[10]; float arr3[9]; double arr4[5]; //下面是一个错误例子: int n=9; int arr1[n];//[]中必须是常量表达式
🍩注:
数组创建,在C99标准之前,[ ]中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念,数组的大小可以使用变量指定,但是数组不能初始化。
1.2 数组的初始化
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值。
比如:
int arr1[10] = {1,2,3,4,5,6,7,8,9,10};//完全初始化 int arr2[10] = { 1,2,3 };//不完全初始化,剩余的元素默认都是0 int arr3[10] = { 0 };//不完全初始化,剩余的元素默认都是0 int arr4[] = { 0 };//省略数组的大小,数组必须初始化,数组的大小是根据初始化的内容来确定 char arr5[]={'a','c',9}; char arr6[]="abc"; char arr7[3]={'a','b','c'}; int arr8[];//错误
🍩数组在创建的时候如果想不指定数组的确定的大小就得初始化。
🍩数组的元素个数根据初始化的内容来确定。
1.3 数组的使用
对于数组的使用我们之前介绍了一个操作符:[],下标引用操作符。它就是数组访问的操作符。
下图是一个长度为 10 的数组,第一个元素的索引值为 0,第九个元素的索引值为 8:
对数组元素进行索取:
🍤实例1:计算数组元素个数
#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]); //计算数组的元素个数 printf("%d\n",sz); return 0; }
🍩sizeof:返回一个对象或者类型所占的内存字节数
🍤实例2:输出数组元素
#include <stdio.h> int main() { int arr[10] = { 0 };//数组的不完全初始化 //对数组内容赋值,数组是使用下标来访问的,下标从0开始。 int i;//做下标 for (i = 0; i < 10; i++)//定义的数组有10个元素,所以下标是从0-9 { arr[i] = i; } //输出数组的内容 for (i = 0; i < 10; ++i) { printf("%d ", arr[i]); } return 0; }
在不知道数组长度的情况下,该如何控制for语句的循环条件?
🍤实例3:
#include<stdio.h> int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int i = 0; int sz = sizeof(arr) / sizeof(arr[0]); //将i<10改为i<sz for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } return 0; }
🍩数组是使用下标来访问的,下标是从0开始。
🍩数组的大小可以通过计算得到。
//计算数组大小 int arr[10]; int sz = sizeof (arr)/sizeof(arr [0]);
1.4 数组在内存中的存储
我们先看一段代码:
#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]);//%p -- 用来打印地址 } return 0; }
运行结果:
在内存中的存储地址:
仔细观察,可以发现后一个元素的地址比前一个元素的地址增4
说明了:数组在内存中是连续存放的,而且由高到低。
2. 二维数组
1.1 数组的创建
int arr[3][4];//3行4列 char arr[3][5]; float arr[1][3];
1.2 数组的初始化
//数组初始化 int arr[3][4] = {1,2,3,4}; int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; int arr[][4] = {{2,3},{4,5}};//二维数组如果有初始化,行可以省略,列不能省略
🍩二维数组的行可以省略,但列不能省
比如:有二维数组
int arr[3][3]={1,2,3,4,5,6,7,8,9};
如果只知道行,无法确定(推出)数组的列数
如果知道了列,就知道了下一行从哪里开始