数组使用葵花宝典
一维数组
一.数组的特点
1.数组是一组有序数据的集合
2.数组中的每一个元素都属于同一个数据类型
二.一维数组的定义
1.一般形式
一维数组的一般形式为
类型符 数组名[常量表达式];
Eg.int a[10]; int a[3+4];
说明:(1)在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。数组元素的下标是从0开始的。
三.数组的引用
一般形式:数组名[下标]
Eg.a[0]表示数组中下标为0的元素
四.一维数组的初始化
1.在定义数组时对全部元素赋予初值。
Eg.inta[10]={0,1,2,3,4,5,6,7,8,9};
2.可以只给数组中的一部分元素赋值
Eg.int a[10]={1,2,3};
3.再对全部数组元素赋初值时,由于数组的个数已经确定可以不必再指定数组的长度
Eg.inta[]={1,2,3,4,5,6,7,8,9,10}
4.如果相对数组的所有元素都置零,可以写成
Int a[10]={0};
五.一维数组使用和定义中所要注意的问题
char arr1[]=”abc”;该数组中包含了a,b,c三个元素
char arr2[3]={‘a’,’b’,’c’};该数组包含了’a’ , ’b’ , ’c’ , ’\0’四个元素
数组的长度计算:int sz=sizeof(arr)/sizeof(arr[0]);
六.一维数组在内存中的存储
随着数组的下标的增长,元素的地址也随之递增,因此说数组在内存中是连续存放的。
七.指向数组的指针
(1)数组元素的指针
所谓的数组元素的指针就是数组元素的地址
指针的特点:
①指针类型决定了指针访问的权限
②指针类型不同结果不同
引用数组元素可以使用下标法也可以用指针法,即通过只想数组元素的指针找到所需的元素
Eg.p=&arr[0]; p=arr;
以上这两句是等价的,说明了数组名不代表整个数组的地址,只代表数组首元素的地址。
P为数组首元素的地址,则p+1就是数组第二个元素的地址,那么p+i就是数组地i个元素的地址,这样就可以得到整个数组中每个元素的地址。
(2)指针表示数组元素的表示形式
①p+i和*(a+i)均表示a[i]的地址
②*(p+i)和*(a+i)都表示p+i和a+i所指对象的内容,它两是等价的。
③一些等价的表达形式
*arr、*(arr+0)、arr[0]等价,它们都表示数组中第一个元素
arr[i]=I、 *(arr+i)=i、*(i+arr)=i、i[arr]=i等价,其中arr 和i只是数组运算中的两个操作数
二维数组
一.二维数组定义的一般形式:类型说明符数组名[常量表达式][常量表达式]
Eg. int arr[3][4];
二.二维数组的引用
二维数组的下标形式为:数组名[下标][下标]
三.二维数组的初始化
(1)分行给而为数组赋初值
Eg.int arr[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}
(2)将所有数据放在花括号里,按数组元素在内存中的排列顺序对各元素赋初值
Eg.int arr[3][4]={1,2,3,4,5,6,7,8,9,10,,11,12}
(3)可以对部分元素赋初值
Eg.int arr[3][4]={{0},{1},{9}};
Int arr[3][4]={{1},{0,6},{0,0,11}};
四.二维数组的使用注意事项
arr代表二维数组的首地址,也可以看作是二维数组第0行的首地址,a+1就代表第1行的首地址,同理a+i就代表第i行的首地址。
五.二维数组在内存中的储存
同一维数组一样二维数组在内存中的存储也是连续的。
六.引用指针对二维数组的访问
arr[0]与* (arr+0)等价,arr[1]与* (arr+1)等价,因此arr[i]+j就与*(arr+i)+j等价,它表示数组元素arr[i][j]的地址。
二维数组元素arr[i][j]可以表示成*(arr[i]+j)或*(*(arr+i)+j).表示第i行第j列的元素
七.总结:
sizeof(数组名)这里的数组明表示整个数组。
&(数组名),这里的数组明表示整个数组
除过以上两种情况之外数组名代表数组的首元素地址