首页 > 学院 > 开发设计 > 正文

数组与指针

2019-11-08 01:02:15
字体:
来源:转载
供稿:网友

数组与指针

数组名(不包括形参数组名,形参数组并不占用实际内存单元)代表数组首元素(即序列号为0的元素)的地址。

int  a[10];

int *p;

p=&a[0]=a;  把数组名a的首元素的地址赋给指针变量p;

*p=1; 表示将1赋给p当前所指向的数组元素;

p+1   ->指向同一个数组的下一个元素,此处不是简单的加1,而是根据p指针所属的数据类型,加上一个单位的步长,例如数组元素是float型,每个元素占4个字节,则p+1指p的值加上四个字节。

(1)    如果p=&a[0]=a;则p+i = a+i =&a[i]是a[i]的地址;

(2)    *(p+i)或*(a+i)是p+i或者a+i所指向的数组元素,即a[i];

(3)    指向数组的指针变量也可以带下标,如p[i]和*(p+i)等价;

引用数组元素,可以使用:

(1)    下标法,如a[i]形式;

(2)    指针法,如*(a+i)或*(p+i),其中a是数组名,p是指向数组元素的指针变量;

注:数组名a 代表数组首元素的地址,a是一个指针常量,a的值在程序运行过程中是固定不变的,所以a++ 得操作是无法实现的

*p++,由于++和*同优先级,结合方向是自右向左,则等价于*(p++)

*(p++)作用:先得到P指向的变量的值(即*p),再使p+1=p;

例如: 

For(i=0;i<10;i++,p++)

PRintf(“%d”,*p);

等价于 for(i=0;i<10;i++)

           Printf(“%d”,*p++);

*(p++)与*(++p)区别?

前者先取*P的值,然后使p加1;后者先使p+1,再取*p;

例:若p的初值为a(即&a[0]);则*(p++)为a[0],而*(++p)为a[1];

注:实参数组名代表一个固定的地址,或者说是指针常量,在运行过程中是固定不变得,

但形参数组并不是一个固定的地址值,而是作为指针变量,在函数调用开始时,他的值等于是参数组首元素的地址,在函数执行期间,他可以再被


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表