数组的使用及与指针的联系

数组,顾名思义就是一组数据的集合即一批具有同名的同属性的数据就组成一个数组。由此可知,①数组是一组有序数据的集合。②用一个数组名和下标来表示确定数组中的元素。③数组中的每一个元素都属于同一个数据类型。
数组的定义
例:int a[10] 表示数组名为a,数组长度有10个整形元素。
类型符 数组名[常量表达式]
在[ ]中必须是常量(可以是const声明的常变量),整形(可以是字符,在编译时转化为ASCII值),正整数(不能为负),必须在其中给以上所述的符合的值。
若在[ ]中的是一个普通定义的变量,如int a[n]是不合法的。也就是说,c语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值而是在编译时就可以确定的变量.
例: int ar[10];
const int n=sizeof(ar)/sizeof(ar[0]);//40/4=10即数组的大小
int br[n];
此时定义的数组br[n]可以编译通过,因为由于sizeof( )的性质,系统在编译时就把n的值给确定了。注意:sizeof(ar)中的ar表示数组的长度40,在其他情况下一般ar表示的是数组内首元素的地址。
数组的初始化(一维):
int a[5]={ };//系统自动给数组中赋0,若无{ }赋的为随机值。
int a[5]={1,2,3,4,5,}//可在5后加“,”也可不加
int a[ ]={1,2,3,4,5}
引用(一维)数组:
普通引用(下表法): 数组名[下标]
通过指针引用数组(指针法):①一个数组包含若干元素,每个数组元素都在内存中占用存储单元,他们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中),所谓数组元素的指针就是数组元素的地址。
例:int a[10]={1,2,3,4,5,6,7,8,9,10};
int *p; //定义p为指向整型变量的指针变量
p=&a[0]; //把a[0]元素的地址赋给指针变量p,此语局等价于p=a;
(p定义时可也以写成:int *p=&a[0];或者int *p=a;)
②在引用数组元素时指针的运算:
(1)在这里我们需要知道在当指针指向数组元素的时候,需要而且可以对指针进行加减(可自加或自减)的运算。如果指针变量p已经指向数组中的一个元素,则p+1指向同一数组中的下一个元素,p-1指向上一个元素(在这里是通过加上上一个或下一个数组元素所占用的字节数所完成的)。
(2)如果有一数组a[10],其中的元素为a[0]到a[i]到a[9]。若p的初值为&a[0]则p+i或a+i就是a[i]的地址,例如p+9和a+9的值时&a[9],它指向a[9].
(3) * (p+i)或 * (a+i)是p+i或a+i所指向的数组元素a[i].例如 * (p+5)或* (i+5)就是a[5]。即 * (p+5),*(i+5),a[5]和5[a]等价
即c语言系统是将a[i]转换为*(a+i)处理的,先算的是元素地址。

猜你喜欢

转载自blog.csdn.net/wtzdedaima/article/details/78300169