前提:
int n = 8;
int arr[n];
这样写会报错,因为[]里面要常量,而n是个常变量
一维数组
写法一:
int类型的数组

整形数组补0,字符数组补\0,在ASCLL码中\0即0
char类型的不完全初始化数组(设置长度)(剩余的默认为 '\0')

不设置长度:(末尾没有 \0)
写法二:
数组里面放一个字符串:
不设置长度默认最后一位是 \0
写法一和写法二的区别:
\0是打印结束的标志 ,这里的char ch2……因为末尾没有 \0,所以会一直往后打印,直到遇到\0才停止,因此会出现乱码
补充:
1、用strlen求数组的长度也会有差异,因为\0也会算上去(ch6是乱码,所以用strlen算出来的是随机值)
2、字符串本身是个数组
区别于 int a = 0;这样写会报错
3、数组内元素的地址之间差距离的就是元素本身大小
这里int类型大小是4
4、单引号与双引号
这样写单引号会报错
二维数组
int ch[3][4]表示三行四列
二维数组的初始化(补0情况与一维数组相同)
形式一:
形式二:
补充:
这样写的话已经超过了3行,所以会报错
二维数组的访问:需要给横坐标和纵坐标(从0开始计数)
补充:
一、二维数组在内存中也是连续存放的,一行内部连续,一行的尾和下一行的首连续
二、二维数组写的时候行可以省略,但是列不能省略,因为二维数组是先确定了一列有多少个元素,再判断从什么地方开始下一行
与scanf的结合:
如果循环用scanf输入,则不能使用一维数组,因为不知道要输入的是几个字符
只能使用二维数组