C语言学习06.数组
2017-10-28 本文已影响6人
快乐的提千万
一维数组
数组(Arrey):若干个相同类型数据的集合。 这些数据称为元素,通过下标作为唯一标识。
数组名也是标识符,指向数组在内存中的首地址。输入输出不用加&。
[]是下标运算符,里面要放常量,从0开始数。不能越界访问,可能找到野地址,或者直接段错误。
//下标(subscript)、索引(indice)或偏移量(offset)
类似于数组名是首地址,然后用下标进行指针偏移,找到对应内存存放的数据。所以只能逐个使用数组元素,不能一次性使用整个数组。
数组初始化:
1.数组初始化数据应该用大括号包含,相邻数据之间用‘,’分隔。
2.初始化数据按顺序从前到后使用
3.如果初始化数据个数超过存储位置个数则丢弃后面的数据
4.如果初始化数据个数少于存储位置个数则后面的存储位置都初始化为0
5.如果初始化数据个数和存储位置个数一致则可以省略存储位置个数
一维数组的初始化
- 全部初始化 int[3]={0,1,2};
- 部分初始化 未赋值的元素为0。 int[3]={0,1,2};其中a[3]=0;
- 只能逐个赋值,不能对整体赋值 a[3]={1,1,1,1};是错的。
- a[3]={0};可以,表示全0,因为未赋值的为0。
- a[]={1,2,3};如果不指定数组大小,编译器会根据初始化情况自动判断数组大小。
- 动态赋值:使用循环。for(i=0;i<10;i++)scanf(“%d”,&a[i]);
sizeof(数组)=sizeof(数组的元素) * 元素的个数
二维数组:
- 链式存储,但是我们可以看成一个矩阵方便理解。
- int m[2][3] = {{0,2,1,2},{1,2,3,2},{2,3,4,2}}; //第一个元素为行(横),第二个为列(纵);
- 二维数组定义时可以省略一维的长度,但二维的长度必须给出。如果列数据不够填充一行,其余的元素初始化为0。
- int m[1][2] = {{1,2,3}{1}}; //m[1][1]、m[1][2]为0
- 存储:行优先次序。即m[0][0] 、m[0][1]...m[1][0]、m[1][1]....m[2][0]....m[2][3]。
- 多维数组存储:先变最右边下标,再依次变化左边的下标。
字符数组(string):若干个字符构成的序列
- 输入:%s ;不要加&,输入串长度要小于数组维数,空格或回车结束,自动加‘\0’
- get()输入 get(str);
- 函数功能:从键盘读入一个字符串到str中,并自动在末尾加‘\0’,输入字符串时以回车结束输入,故该函数可以读入含空格的字符串。
- 输出:格式化输出,到‘\n’结束(不会自动换行)
- Put()输出 put(str);
- 函数功能:将字符数组str中包含的字符串或str所代表的字符串输出,同时将‘\n’转换成换行符。(会自动换行)
数组和函数
- 数组元素作为实参 元素只代表一个存储单元———>就相当于一个变量
- 数组名作为实参 数组名是一个地址值———>指针变量(传递数组的首地址)
此时要求实参与实参数组的类型、维数相同。进行的是地址的传递,即实参的首地址传给形参数组名。
数组名只给了首地址,没有开辟新的存储单元,只开辟了指针变量的存储单元 - 数组元素地址作实参 地址值———>指针变量(传递变量的指针)