数组与指针

数组与指针

数组名(不包括形参数组名,形参数组并不占用实际内存单元)代表数组首元素(即序列号为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];

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值