1,一维数组的创建和初始化
数组是一组相同类型元素的集合
语法结构
变长数组中可为变量,但是变长数组不能被初始化。元素类型 数组名 [数组大小必须为常量]
创建的同时给数组一些值叫做初始化,不完全初始化剩余的元素默认为0,如果创建时没有指定数组元素个数。编译会根据初始化的内容来确定数组的元素个数。
2,一维数组的使用
[]下标引用操作符,默认用来访问数组。
数组默认有下标,下标从0开始。
3,一位数组在内存中的存储
一维数组在内存中是连续存放的
随着数组下标的增长,地址是由低到高变化的
4,二维数组的创建和初始化
(1)eg:
创建int arr[3][4]={}三行四列其余都为0。
可以只存前两列int arr[3][4]={{1,2},{3,4},{5,6}}其余都为0。
二维数组的行是可以省略的,但是列不可以省略,数组创建时先放行后放列
(2)二维数组的使用
行和列都是从0开始,确定下标就能找到想要的元素。
(3)二位数组在内存中的存储
二维数组在内存中也是连续存放的,可以把二维数组看成一维数组,可以通过指针加减找到所有元素。 也可以把二维数组的每一行都想象成一维数组,二维数组也是一维数组的数组
5,数组越界
数组的下标规定从0开始,如果有n个元素,最后一个元素的下标就是n-1。
所以如果数组的下标小于0或者大于n-1,数组就越界访问,超出了数组合法空间的访问。
6,数组作为函数参数
数组作为函数参数进行传递
eg,1
冒泡排序,一次搞定一个数字,让该数字出现在最后的位置上
n个数字需要排n-1次
用函数实现冒泡排序
#include <stdio.h>
void Sort(int arr[], int sz)
{
int i = 0;
for (i = 0; i <= sz - 1; i++)
{
int j = 0;
for (j = 0; j <= sz - 1 - i; j++)
{
if (arr[j] > arr[j+1])
{
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
int main()
{
int arr[] = { 2,4,3,1,7,5,6,8,9 };
int sz = sizeof(arr) / sizeof(arr[0]);
Sort(arr, sz);
return 0;
}
6,数组名是什么
数组名是数组首元素的地址,但是有两个例外1,sizeof(数组名),这里的数组名是表示整个数组,计算的是整个数组的大小,单位是字节
2,&数组名,这里的数组名表示的是整个数组,&数组名取出的是数组的地址