C语言 在引用数组元素时指针的运算

1.在一定条件下是允许对指针进行加和减的运算的。
当指针指向数组元素时,可以对指针进行加和减运算,比如:当指针变量p指向数组元素a[0],我们希望用p+1表示下一个元素a[1]。
2.当指针已指向一个数组元素时,可以对指针进行以下运算:
(1)加一个整数(用+或+=),如p+1;
(2)减一个整数(用-或-=),如p-1;
(3)自加运算,如p++,++p;
(4)自减运算,如p- -,- -p;
(5)两个指针相减,如p1-p2(只有p1和p2都指向同一数组中的元素时才有意义)。
具体的说明如下:
(1)如果指针变量p已指向数组中的一个元素,那么p+1则指向同一个数组中的下一个元素,p-1指向同一数组中的上一个元素。
【注意】执行p+1时并不是将p的值(地址)简单加1,而是加上一个数组元素所占用的字节数。例如,数组元素是float型,每个元素占4个字节,则p+1就是使p的值(是地址)加4个字节,使它指向下一个元素。也就是说,p+1所代表的地址是p+1*d,d是一个数组元素所占字节数(在Visual C++中,int型d=4;float型d=4;long型d=4;char型d=1)。
关于系统为什么知道p+1d该怎么给1d再与p相加:
因为在定义指针变量时必须要指定基类型。

(2)如果p的初值为&a[0],则p+i和a+i就是数组元素a[i]的地址,或者说p+i和a+i指向a数组序号为i的元素。但是需要注意,a代表数组首元素的地址,a+1也是地址,它的计算方法和p+1一样,也就是说它的实际地址为a+1*d。例如,p+9和a+9的值是&a[9],它指向a[9]。如下图所示:
请添加图片描述
(3)*(p+i)*(a+i)是p+i或a+i所指向的数组元素,即a[i]。例如,*(p+5)*(a+5)就是a[5]。即*(p+5)*(a+5)a[5]三者等价。实际上在编译的时候,对数组元素a[i]就是按*(a+i)处理的,即按数组首元素的地址加上相对位移量得到要找的元素的地址,然后找出该单元中的内容。
【说明】
[ ]实际上是变址运算符,即将a[i]按a+i计算地址,然后找出此地址单元中的值。

(4)如果指针变量p1和p2都指向同一数组中的元素,如执行p2-p1,结果是p2-p1的值(两个地址之差)除以数组元素的长度。假设p2指向整型数组a[5],p2的值是2020;p1指向a[3];p1的值是2012,则p2-p1的结果是(2020-2012)/4=2,这个结果代表的意义是表示p2指向的元素与p1指向的元素之间差两个元素。这样我们就可以方便地知道在同一个数组中两个元素的相对距离。
【注意】两个地址不能相加,两个地址相加是没有任何意义的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值