8.1 一维数组
关于数组输入的问题
#include <stdio.h>int main(){int a[5] = {0};// inputfor(int i=0;i<5;i++){scanf("%d",&a[i]);}printf("output\n");// outputfor(int i=0;i<5;i++){printf("%d ",a[i]);}}// 输出12345output1 2 3 4 5
8.1.3 数组初始化
如果初始化比数组短,那么剩余位用 0 代替
#include <stdio.h>int main(){int a[10] = {1,2,3};for(int i=0;i<10;i++)printf("%d ",a[i]);}// 输出1 2 3 0 0 0 0 0 0 0
显式的初始一个数组,可以省略数组长度
#include <stdio.h>int main(){int a[] = {1,2,3,4,5};for(int i=0;i<5;i++)printf("%d ",a[i]);}// 输出1 2 3 4 5
8.1.5 对数组使用 sizeof 运算符
sizeof 用来确定数组的大小(字节数)
#include <stdio.h>int main(){int a[] = {1,2,3,4,5};printf("%d 字节",sizeof(a));}// 输出20 字节
sizeof 计算数组元素的大小
#include <stdio.h>int main(){int a[] = {1,2,3,4,5};printf("%d 字节",sizeof(a)/sizeof(a[0]));}// 输出5 字节
sizeof 计算的数组大小可以不改变循环
#include <stdio.h>int main(){int a[] = {1,2,3,4,5};for(int i=0;i<sizeof(a)/sizeof(a[0]);i++)a[i]=0;}// 当数组长度发生改变时,也不需要改变循环体
8.2 多维数组
多维数组逻辑图

多维数组物理图(行主序存储)

8.2.1 数组初始化
常规初始化(所有项都填满)
int main(){int a[2][3] = {{1,2,3},{4,5,6}};for(int i=0;i<2;i++){for(int j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n");}}/**** or ****/// 可以忽略行数,但不能忽略列数 a[][3]#include <stdio.h>int main(){int a[][3] = {{1,2,3},{4,5,6}};for(int i=0;i<2;i++){for(int j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n");}}// 输出1 2 34 5 6
未填满位赋值为 0
#include <stdio.h>int main(){int a[][3] = {{1,2,3},{4,5}};for(int i=0;i<2;i++){for(int j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n");}}// 输出1 2 34 5 0
8.2.2 常量数组
常量的关键字是 const,和 java 中的 final 关键字类似,即初始化后不能在改变
#include <stdio.h>int main(){const int a[][3] = {{1,2,3},{4,5}};for(int i=0;i<2;i++){for(int j=0;j<3;j++){a[i][j] = 0;}}}// 报错[Error] assignment of read-only location 'a[i][j]'
