一维数组的创建和初始化 数组是一类相同类型元素的集合 int arr[100]放了一百个元素.
数组的创方式 type_t arr_name [count_n];
c99引入了变长数组的概念,允许数组的大小用变量来指定,如果编译器不支持c99,那么就不能使用变长数组.
数组的初始化 int arr[10] = {1,2,3,4};//不完全初始化 ,在c99里变长数组不能初始化
char 数组里面储存的是ASCII值.
arr[] = {1,2,3};//会根据内容初始化大小.
int arr[10];//不初始化里面放的都是错误值或随机值, 局部变量不初始化都不让用.全局变量和静态变量不初始化默认是0.
c语言有三个区,栈区,堆区,静态区, 静态区变量不初始化默认是0, 栈区不初始化默认是变量
arr[] = {1,2,3,4};//有4个字符 arr[] = "1234";//有5个字符.
[]下标引用操作符,arr[4]中,arr,4是[]的两个操作数.
arr[] = {1,2,3,4}用strlen(arr)得出的长度是1,size_t strlen( const char *string ); 他检测的长度是一个字符或字符串的长度,所以要求这个数组大小就用sizeof(arr)/sizeof(arr[0]);
一维数组在内存中的存储 一维数组在内存中是连续存放的,相邻的两个元素差一个定义类型的大小随着下标的增长,地址由低向高变化.
%p是用来打印地址的,使用16进制.
二维数组的创建 int arr[3][5]; → 三行五列的数组
二维数组的初始化 int arr[3][5] = {1,2,3,4,5,6},把第一行填满后填充第二行
int arr[3][5] = {{1,2},{4,5},{6,7}}; 第一行是1,2第二行是4,5 第三行是6,7
定义的时候省略行数会根据初始化确定行数,但是列不能省略.
int arr[5][3] = { 3 };初始化的只是第一个元素,其它默认为0.
sizeof(arr)是整个数组大小 sizeof[0]是第一行大小 sizeof[0][0]是第一个元素大小
sizeof(arr)/ sizeof[0] 是有几行 sizeof[0]/sizeof[0][0]是第一行有几个元素也就是有几列
二维数组也是连续存放的,即使是有第一行和第二行,第一行放完放第二行.
数组下标要是小于0或者大于n-1就是数组越界了.c语言本身不检查越界,编译器也不一定报错,所以程序员需要自己检查越界.
整形和字符是两个概念,当一个数组char arr[] ={‘1’,‘2’,‘3’};使用strlen求其长度,长度值是一个随机数,因为他会寻找3后面第一个\0作为结尾.
数组成为函数参数 冒泡排序的函数来排序arr数组的内容,数组命就是数组首元素地址(sizeof(arr)和&arr是两个例外)①sizeof计算整个数组大小②&arr直接打印还是首元素地址,但是&arr+1是地址直接加整个数组大小.