c语言数组
数组
一: 1、什么是数组?
一组 相同类型 的 若干 个 有序 的数据集合
2、数组的名词:
1)数组名:带表一组相同类型若干个有序的数据集合()
2) 数组元素:构成数组的每一个元素
3)下标:数组是有序的,下标有序,用来标识每个元素在数组中的位置
4)数组的维度: 元素下标的个数
5)数组的长度:集合中元素的个数
3、分类:
1)按内容分类:数值型数组(整型、实型)、字符型数组、指针数组、构造数组
2) 按维度分类:一维数组、二维数组、多维数组
二: 1、一维数组的定义?
格式:
数据类型 数组名[长度];1+2 4+5
int a[10];
//定义了一个整型的数组a
//另一种描述:定义了了一个长度为10,每个元素都只能存放int型数据的数组 数组名是a
int 表示数组中每个元素的类型都必须是int型
注意:
1)a是数组的名称,a需要遵守标示符的命名规范
(1)字母、数字、_ 、美元符号组成,不能以数字开头,不能和关键字重名,严格区分大小写
2)数组长度不能使用变量,
int n=5; int arr[n]; //这种写法C规范不可以,但是Xcode可以
原因:不能用定义数组的时候长度用变量同时初始化,如果定义数组的时候长度用变量的话,编译时并不会运行,编译器看到变量,同时初始化话的话,编译器不确定是否超出了数组长度范围
3)数组长度可以使用宏定义
#define N 5; int arr2[N+3];//这种写法是可以的
4)数组名不能和其他变量重名
int a;
int a[10];错误
5)可以一次定义多个数组
int a[10],b1[3]; //表示定义了两个整型数组,第一个数组名a,能存放10个int型的数据,第二个数组 b1 能存放3个int型数据
6)数组定义后,只能存放定义类型的数据
int a[10]; 只能存放int型数据
7)可以定义变量的同时,定义数组
int a,b,arr[10];
三:1、数组的初始化
变量的初始化, 给变量赋初值
数组的初始化,给数组中的每个元素都要进行初始化;
2、数组的初始化的方法
数组如果定义完成以后,没有进行初始化,这个时候,元素的值是随机数(垃圾值)
初始化的格式:int 数组名[长度]={值1,值2,.....}
1)定义的同时进行初始化 int a=10;
(1)完全初始化
int a[5]={1,2,3,4,55};
注意:初始化数值得个数可以小于长度,但是不能大于长度
不指定数组长度的完全初始化
int a3[]={1,2,3}; //定义一个数组,数组的长度由初始化的元素的个数决定的
误区:
a3={1,2,3}; 错误
a3[]={1,3,4}; 错误
(2)部分初始化
int a1[5]={1}; //优先把1初始化给第一个元素
指定元素的部分初始化
int a2[5]={[2]=1,[4]=100};
// 给第三个元素初始化为1 给第5个元素初始化为100
2)先定义,后初始化
误区:
int a1[5];
a1[]={1,2,3}; 错误的
a1={1,2,3}; 错误的
正确用法:每个元素逐个进行初始化
a1[0] = 10;
a1[1] = 100;
a1[2] = 1000;
a1[3] = 10000;
a1[4] = 1;
a1[5] = 0; //错误的
3、数组的引用
数组的引用,其实就是获取数组中存储的内容
可以通过数组下标,来访问数组中的每一个元素
如果说数组长度为n , 下标的最大值 n-1,最小是 0
如果说某个数组的下标最大值是n,数组最少有 n+1个元素
四: 1、数组的存储方式
//每个地址相差4个字节
int a[3]={13,34,438};
//数组的首地址 = a[0]的地址 = a
//所以,数组名存放的实际上是数组的首地址
2、数组的长度计算方法
// 数组在内存中占用的字
节数:sizeof(int)*n个数 = sizeof(数组名)
3、访问数组的下标,超过了最大下标
//约错了对象,越界程序会给出警告,但是不会报错,千万要注意越界
五:数组与函数之间的关系:
1)数组的元素作为函数的参数(传的是变量值,函数结束内存释放)
函数的形参跟调用函数传得实参(必须是是相同的数据类型)
注意:数组元素作为函数的参数,这是值传递
2)数组名作为函数的参数(传的是地址是指针)
因此可以修改原数组内的元素
注意:
1)数组名作为函数的参数,是地址的传递,在函数中可以直接修改数组的内容
2)用数组名作为函数参数,会丢失数组长度,所以用数组名作为函数的参数,要传递数组名的同时,尽量把数组长度也传过去
函数调用时传的数组地址求数组长度为8,因为它求的是指针在在内存中地址中占用的大小。而在main函数中则sizeof(数组名)求的是数组占用内存大小(具体不太明白)
3)函数形参中定义的数组的长度,和实参数组的长度尽量保持一样,否则可能会有问题
4)通常情况下形参的数组长度是不指定的,它的长度有实参的来决定的
5)函数的形参数组的类型,要和实参数组的类型要一至