1.数组——相同元素类型的集合
2.数组创建 type_t arr_name [const_n]
数组类型 数组名 常量表达式(用来指定数组大小)
eg:
int arr1[10];
char arr2[5];
注释:方括号里面只能放常量表达式 比如:3 ,4, 4+3
3.数组的初始化(一般在创建数组时会对数组进行初始化)
eg:
int arr1[3]={1,2,3};//可以
int arr2[3]={1,2,3,4}; //不可以,数组内容超过了数组规定的长度。
int arr3[]={1,2,3}; //可以,若方括号里面不填常量表达式则会通过初始化内容判断元素个数 。
int arr4[]; //不可以,常量表达式和初始化必须完成一个。
int arr5[10]={1,2,3}; //可以,为不完全初始化,剩下元素默认初始化为零。
char arr6[3]={'a','b','c'}; //可以
char arr7[3]={'a','98','c'}; //可以,98会根据ASCII表转化为对应字符b
char arr3[4]={"abc"} //可以,里面存了四个元素,'a','b','c','\0'
4.数组的使用
通过下标方式使用来调用数组中的元素,第一个元素的下表是零
将任意一个小于等于255的整数转化为一个8位二进制数字
#include<stdio.h> #define N 8 //固定位数(宏) int main() { int arr[N] = { 0 };//将数组初始化为0(位数不满时,将输出0填补) int i; int n; printf("请输出一个整数:\n"); scanf_s("%d", &n); if (n > 255) { printf("输入错误\n"); return 0; } for (i = N - 1; i >= 0; i--) //对数组从后往前赋值 { arr[i] = n % 2; n = n / 2; } printf("输出一个八位二进制:\n"); for (i = 0; i <= N - 1; i++) { printf("%d", arr[i]); } return 0; }
执行结果
五,一维数组的储存
打印出地址
int main() { int arr[] = { 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", arr[i],&i); } }
执行结果
由从输出结果我们可以看出数组元素在内存中的存储是:地址是由低到高并且是连续存储的。
六.二维数组的创建
数组创建 type_t arr_name [const_n] [const_n]
数组类型 数组名 常量表达式(用来指定数组大小)
注释:可将二位数组理解为一个表格第一个方括号理解为行数第二个方括号理解为列数。
七,二维数组的初始化
int arr[3][4] = { 1, 2, 3, 4, 5, 6 };可以,第一行1,2,3,4第二行5,6,0,0第三行全是零
int arr[][4] = {{1, 2},{3, 4, 5},{6}};可以第一行1,2,0,0第二行3,4,5,0第三行6,0,0,0
int arr[3][] = {{1, 2},{3, 4, 5},{6}};是不可以的
注释:列数必须规定,行数可以省略
八,二维数组的使用(通过下标使用)
#include<stdio.h> int main() { int arr[3][5] = { 0 }; int i = 0; int j = 0; for (i = 0; i < 3; i++) { for (j = 0; j < 5; j++) { arr[i][j] = i * 5 + j + 1; } } for (i = 0; i < 3; i++) { for (j = 0; j < 5; j++) { printf("%d ", arr[i][j]); } printf("\n"); } return 0; }
执行结果
九.二位数组的储存
将地址打印出来
#include<stdio.h> int main() { int arr[3][5] = { 0 }; int i = 0; int j = 0; for (i = 0; i < 3; i++) { for (j = 0; j < 5; j++) { printf("&arr[%d][%d] = %p\n", i, j, &arr[i]); } } return 0; }
结果
从结果看出二维数组的中元素在内存中都是连续存放的