C语言学习:数组方面应用

来源:互联网 发布:2004年流行的网络歌曲 编辑:程序博客网 时间:2024/05/16 01:40

前言

(1)

一个数组包含 若干元素,每个数组元素都在内存中占用存储单元,也都有响应的地址。

(2)

定义一个数组:int a[5];
在c语言中,数组名(不包括形参数组名,形参数组不占据实际的内存单元)代表:数组中首元素的地址

int * p;
p = &a[0];
所以:
p =a ;

把a数组的首元素的地址赋给指针变量p,而不是把数组a各元素的值赋给p。

(3)

可以写成:int * p =a;
就是把这个数组的首元素的地址交给了指针变量p。
并且使用指针可以使目标程序占内存少,运行速度快。

运算

在一定条件下允许对于指针进行加和减的运算。
这个条件就是当指针指向数组元素的时候。

(1) p+1 / p-1

指的是同一数组中的下一个元素/同一数组中的上一个元素。
执行p+1时并不是将p的值(地址)简单的加1,而是加上一个数组元素所占的字节数,
比如一个float 型,每个元素占4个字节,则p+1就是使p的值加上四个字节,以使它指向
下一个元素。

p+1 就是 : p + 1*d (d表示的是一个数组元素所占的字节数)

(2)p++ / p–

自身加减1

(3)

如果p的初值为&a[0] , 那么p+i 和 a +i 就是数组元素a[i] 的地址 ,就是指向数组中位置是i 的元素。

(4)

如果p 的初值为 &a[0] ,那么(p+i) 或 (a+i)就是p+i或a+i所指向的数组元素,
比如:* (p+5) 或 *(a + 5)就是a[5]的值。
原理上讲,对于a[i] 的处理,就是按照 * (a+i) 处理,因为,数组名 a 就是代表的是a[0] 的地址。

(5)

如果指针变量 p1 和 p2 都是指向同一数组,那么p2 - p1 ,得到的结果就是p2 - p1 的值(地址差),去
除以数组元素的长度。 那么这个结果的意义就是,p2 所致元素和 p1 所指元素之间相差了几个元素。

表示

如何表示数组中一个元素的值:

(1) 下标法

如a[i] 形式,可以理解为,就是数组a中存的值。
你直接打印a[i] 显示的是具体的值,实际上是先找i 的地址,再去取值。

(2) 指针法

如* (p+i) ,也是取数组中i位置上的值。

原创粉丝点击